#linux #makefile #compilation #linux-kernel #kernel
#linux #makefile #Сборник #linux-ядро #ядро
Вопрос:
Я компилирую ядро Linux в виртуальной машине (виртуальном ящике) с выделенными 2 из 4 ГБ и 4 из 8 процессоров. Моя первоначальная компиляция заняла около 8-9 часов, и я также использовал оптимизацию make -j4. Теперь я добавил простой системный вызов в ядро и просто запустил make -j4, и он компилировался в течение последних 3 часов. Я думал, что после первоначальной компиляции make будет компилировать только небольшие изменения, но, похоже, он компилирует все (в основном драйверы). Могу ли я каким-либо образом ускорить этот процесс компиляции?
Например, есть ли какой-либо способ отключить некоторые драйверы, которые мне на самом деле не нужны, например, если я просто хочу реализовать простой системный вызов, мне действительно не нужны все сетевые драйверы, и, возможно, это ускорит процесс? т. е. я просто хочу, чтобы моя минимальная функциональность для моего ядра тестировала мои системные вызовы.
Комментарии:
1. Вы должны предоставить больше памяти и процессора своей виртуальной машине, или же выполнять сборку изначально, а не на виртуальной машине. Также проверьте, как вы настроили свой виртуальный диск. Что касается того, почему все перестраивается, это зависит от того, какие файлы вы изменили. Если вы изменили общий файл, который включают все или большинство драйверов, make перестроит их все. Итак, это зависит от того, какие части кода вы затронули, когда добавили свой простой системный вызов.
2. @MadScientist, это был системный вызов hello world, я изменил системные вызовы. файл h для него. Я думаю, что это используется в качестве заголовка во всех драйверах, так что это может быть причиной. У меня максимальный лимит в 4 ГБ оперативной памяти, а моя хост-ОС — Windows, поэтому я действительно не могу выйти за рамки этого.
3. Вы определенно можете отключить все драйверы и использовать минимальную конфигурацию. Вы также должны проверить, выполняете ли вы замену.
-j4
может быть слишком много процессов для вашей доступной оперативной памяти.
Ответ №1:
Компиляция ядра всегда будет занимать очень много времени, к сожалению, нет никакого способа обойти это, кроме наличия действительно хорошего процессора с большим количеством многопоточности, однако в таких огромных проектах, как этот, ccache значительно сократит время компиляции, это не идеально, но намного лучше, чем просто компиляция объектов.
Вы не увидите разницы при начальной компиляции, но это ускорит перекомпиляцию за счет использования созданного кэша вместо компиляции большей части того, что уже было скомпилировано ранее.