Подтвердить что ты не робот

Как ускорить компиляцию ядра Linux?

У меня есть ядро ​​i5 с 8 ГБ оперативной памяти. У меня установлена ​​рабочая станция VMware 10.0.1 на моей машине. У меня есть Fedora 20 Desktop Edition, установленная на VMware в качестве гостевой ОС.

Я работаю над исходным кодом ядра Linux v 3.14.1. Я разрабатываю планировщик ввода-вывода для ядра Linux. После любых модификаций кода каждый раз, когда требуется около 1 часа 30 минут для компиляции и установки всего кода ядра, чтобы увидеть изменения.

Команды компиляции и установки: make menuconfig make make modules make modules_install make install

Итак, мой вопрос: можно ли сократить время в 1 и 30 минут всего за 10-15 минут?

4b9b3361

Ответ 1

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

Просто выполните:

make

или если вы предпочитаете параллельную компиляцию:

make -j4

или любое количество одновременных задач, которые вам нравятся.

Тогда, возможно, потребуется make install и т.д. для развертывания недавно созданных двоичных файлов.

Еще один трюк - настроить ядро ​​на минимум, необходимый для ваших тестов. Я обнаружил, что для многих задач компиляция UML (User Mode Linux) является самой быстрой. Вы также можете найти полезный make localmodconfig вместо make menuconfig для начала.

Ответ 2

Вам не нужно запускать make menuconfig снова при каждом изменении - требуется только один раз создать файл ядра .config. (Или, возможно, снова, если вы редактируете файлы Kconfig для добавления или изменения параметров конфигурации, но это, безусловно, не должно происходить часто.)

Пока ваш .config остается один, запуск make должен только перекомпилировать файлы, которые вы изменили. Есть несколько файлов, которые нужно скомпилировать каждый раз, но подавляющее большинство нет.

Ответ 3

  • Используйте make параллельную сборку с опцией -j
  • Компиляция только для целевой архитектуры, поскольку в противном случае make будет создавать ядро ​​для каждой указанной архитектуры.

то есть. например, вместо запуска:

make

пробег:

make ARCH=<your architecture> -jN

где N - это нет ядер на вашей машине (cat /proc/cpuinfo перечисляет количество ядер). Например, для i386 целевой и хост-машины с 4 cores (вывод cat /proc/cpuinfo):

make ARCH=i386 -j4

Аналогичным образом вы можете запускать другие целевые объекты (modules, modules_install, install) с флагом -jN.

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

Ответ 4

make -j будет использовать все доступные процессоры.

Ответ 5

Возможно, в дополнение к предыдущим предложениям, используя программное обеспечение ccache (https://ccache.samba.org/), а каталог компиляции на накопителе SSD должен резко уменьшить компиляцию время.

Ответ 6

Если у вас есть достаточная оперативная память, и вы не будете использовать вашу машину, пока ядро ​​будет построено, вы можете создать большое количество параллельных заданий. Но убедитесь, что ваша оперативная память достаточна, иначе ваша система зависает и падает.

Ответ 7

ccache должен иметь возможность значительно ускорить время компиляции. Это ускоряет перекомпиляцию, кэшируя предыдущие компиляции и обнаруживая, что повторная компиляция выполняется снова. Ваша первая компиляция с ccache будет медленнее, поскольку она должна заполнять кеш, но последующие сборки должны быть намного быстрее.

Если вы не хотите суетиться с конфигурациями ccache, вы можете просто запустить его так, чтобы скомпилировать ядро:

ccache make