2015-06-01 13 views
0

Я заинтересован в понимании ядра Linux. Особенно файловая система. Итак, что я делаю, я разместил инструкции «printk» в файлах (например, inode.c, ialloc.c и т. Д.) В папке fs/ext3/в исходном коде ядра.Не компилировать все ядро ​​только его часть

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

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

+1

Запуск make должен составлять только те детали, которые устарели. –

+0

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

+0

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

ответ

0

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

Предположим, что ядро ​​исходный каталог Linux-ххх изменить каталог

CD Linux-ххх

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

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

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

+0

Это решение проблемы, которая не должна существовать в первую очередь. 'make' автоматически перекомпилирует измененные файлы и пропустит компиляцию файлов, которые не изменились. Если это не так, что-то не так с вашей настройкой, и вы должны исправить это, а не работать вокруг него. – tangrs

0

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

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

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

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

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

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

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

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

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

0

Чтобы создать отдельный модуль (ext3 в вашем случае). попробуйте сделать M = "path_to_module"

cd linux-src 
make M=fs/ext3