Не компилировать все ядро, а только его часть

Меня интересует понимание ядра Linux. Особенно файловая система. Итак, что я делаю, так это размещаю операторы «printk» в файлах (таких как inode.c, ialloc.c и т. д.) в папке fs/ext3/ в исходном коде ядра.

Итак, теперь я хочу, чтобы вместо компиляции всего ядра я хотел скомпилировать только ту часть, которая связана с файловой системой ext3. Есть ли способ скомпилировать только часть, в которой я внес изменения в системах на основе Debian (я использую Ubuntu 14.04). Мне приходится ждать, пока все ядро ​​скомпилируется без необходимости, хотя я внес изменения только в небольшую его часть. Пожалуйста, помогите мне в этом отношении.

P.S. Я поискал в интернете и нашел несколько ссылок. Но они неудовлетворительны. Их шаги указывают на компиляцию полного ядра.


person AnnGM    schedule 01.06.2015    source источник
comment
Запуск make должен собирать только те части, которые устарели.   -  person Gil Hamilton    schedule 01.06.2015
comment
Да, я согласен, сэр, но он собирает полное ядро. И я хочу собрать только ту часть, в которую я внес изменения, и добавить ее в существующее ядро. Не собирать все ядро ​​ради небольшого изменения.   -  person AnnGM    schedule 01.06.2015
comment
Возможно, стоит попытаться выяснить, почему make считает, что все ваши объекты устарели. Одна из возможностей состоит в том, что некоторые заголовочные файлы ядра имеют временные метки, которые позже, чем текущая системная дата-время.   -  person Gil Hamilton    schedule 01.06.2015


Ответы (3)


Я предположил, что вы изменили fs/ext3/inode.c

Предположим, исходный каталог вашего ядра linux-x.x.x, измените каталог

cd linux-x.x.x

Чтобы скомпилировать конкретный файл

сделать ./fs/ext3/inode.o

Будет скомпилирован только конкретный файл. Сделайте то же самое для всех файлов, которые вы изменили.

person Punit Vara    schedule 05.11.2015
comment
Это решение проблемы, которой изначально не должно было существовать. make автоматически перекомпилирует измененные файлы и пропустит компиляцию неизмененных файлов. Если это не так, значит, что-то не так с вашей настройкой, и вы должны исправить это, а не обходить это. - person tangrs; 06.11.2015

Да, я согласен, сэр, но он собирает полное ядро. И я хочу собрать только ту часть, в которую я внес изменения, и добавить ее в существующее ядро. Не собирать все ядро ​​ради небольшого изменения.

Если я правильно понимаю, вы хотите скомпилировать объектный код для части файловой системы ядра и каким-то образом взломать его в вашем текущем ядре.

Короткий ответ:

Это невозможно сделать. Просто скомпилируйте все ядро. После первой компиляции make гарантирует повторную компиляцию только измененных файлов, поэтому будущие сборки будут быстрыми.

Длинный ответ:

Если ваше текущее работающее ядро ​​скомпилировало поддержку EXT3 в качестве модуля (я предполагаю, что это возможно - я не проверял), вы можете попытаться также скомпилировать модифицированный код файловой системы в виде модуля и подкачать его в работающее ядро, выгрузив текущий модуль файловой системы и загрузить свой. Конечно, вы сможете сделать это только в том случае, если вы на самом деле не используете драйвер EXT3 во время выгрузки.

Затем вы столкнетесь с теми же проблемами, что и при сборке и запуске модулей ядра OOT. Вам почти наверняка понадобятся заголовки ядра, та же версия компилятора, которая использовалась для компиляции текущего ядра, и соответствующие исходные коды ядра. Вам также может понадобиться возиться с Makefiles, чтобы модули в дереве можно было собрать как модуль OOT.

Конечно, все это предполагает, что ваше текущее ядро ​​​​было собрано с драйвером EXT3 в качестве загружаемого модуля ядра, что может быть не так.

Если это не так, вам крупно не повезло. Если вы сообразительны, вы можете использовать некоторые хитрости компоновщика, чтобы заменить подсистему EXT3 вашими измененными объектными файлами в вашем текущем ядре. Если это не имеет для вас никакого смысла, достаточно сказать, что это невозможно.

person tangrs    schedule 05.11.2015

Для сборки отдельного модуля (ext3 в вашем случае). попробуйте сделать M="path_to_module"

cd linux-src 
make M=fs/ext3
person Shehbaz Jaffer    schedule 15.08.2016