Сборка ядра Linux

Самым основным компонентом операционной системы Linux есть ядро. Именно ядро выступает промежуточным звеном между пользовательскими программами и оборудованием компьютера. Во всех бинарных дистрибутивах не нужно заботиться о сборке и настройке ядра, все уже сделали за нас разработчики дистрибутива. Но если вы хотите установить самую свежую версию ядра или настроить его под себя удалив от туда всё лишнее, вам придется собрать его вручную.

Раньше ядро собирали для того чтобы получить максимальную производительность от своего оборудования, но сейчас, учитывая стремительное увеличение мощности компьютеров увеличение производительности при сборке ядра совсем незаметно. Сейчас сборка ядра может понадобиться пользователям не бинарных дистрибутивов, таких как Gentoo, тем, кто хочет внести некоторые изменения в ядро, получить новую самую свежую версию ядра и, конечно, же тем, кто хочет полностью разобраться в работе своей системы. В этой статье мы рассмотрим как собрать ядро Linux на примере дистрибутива Ubuntu.

Сборка ядра Linux из исходников

Первая часть расскажет как настроить ядро в автоматическом режиме. Так сказать, для тех кто не хочет разбираться как оно работает, кому нужно лишь получить на выходе готовый продукт - собранное ядро. Во второй части мы рассмотрим основные этапы ручной настройки ядра, это процесс сложный, и не быстрый, но я попытаюсь дать основу, чтобы вы могли со всем разобраться сами.

1. Текущая версия ядра

Для того чтобы посмотреть текущую версию ядра, установленную в системе используйте такую команду:

uname -a

2. Установка необходимых пакетов

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

sudo apt install libncurses-dev libncurses dwarves build-essential gcc bc bison flex libssl-dev libelf-dev

После установки пакетов можно переходить к загрузке исходников ядра.

3. Получение исходников ядра

Исходники лучшие брать с сайта вашего дистрибутива, если они там есть или официального сайта ядра: kernel.org. В этой статье будет рассмотрена загрузка исходников с kernel.org.

Перед тем как скачивать исходники нужно определиться с версией ядра которую надо собирать. Есть две основных версии релизов - стабильные (stable) и кандидаты в релизы (rc), есть, конечно, еще стабильные с длительным периодом поддержки (longterm), но важно сейчас разобраться с первыми двумя. Стабильные это, как правило, не самые новые, но зато уже хорошо протестированные ядра с минимальным количеством багов. Тестовые - наоборот, самые новые, но могут содержать различные ошибки.

Итак когда определились с версией зайдите на kernel.org и скачайте нужные исходники в формате tarball:

В этой статье будет использована самая новая на данный момент стабильная версия 5.13.7. Полученный с официального сайта архив необходимо распаковать. Для этого перейдите в папку загрузок и выполните команду распаковки:

cd ~/Загрузки/

tar xvf linux*

Затем нужно перейти в папку с распакованными исходниками ядра. Например, для версии 5.13.7 команда будет выглядеть вот так:

cd linux-5.13.7/

4. Текущая конфигурация ядра

Вы можете сами настраивать ядро с нуля, но это, скорее всего, займет очень много времени и точно не для новичков. Поэтому удобнее всего взять текущую конфигурацию ядра и использовать её в качестве базы для сборки нового. Во многих дистрибутивах конфигурация хранится в файле /proc/config.gz. Однако это будет работать только если была включена соответствующая опция ядра. Извлечь такую конфигурацию можно с помощью команды:

zcat /proc/config.gz > .config

Часто поддержка этой возможности отключена. Но в Ubuntu и других современных дистрибутивах, конфигурация ядра находится в папке /boot, в файле с названием config и версия ядра. Если у вас в системе установлено несколько ядер, то будет несколько конфигурационных файлов. Например, config-5.11.0-25-generic:

ls /boot

Для того чтобы скопировать этот конфигурационный файл в папку с исходниками выполните:

cp /boot/config-5.11.0-25-generic .config

5. Автоматическая конфигурация

Полученную конфигурацию необходимо актуализировать до состояния текущего ядра. В новых версиях ядра, обычно, добавляются новые опции, значений которых ещё нет в конфигурации ядра вашего дистрибутива. Для этого есть несколько скриптов. В этой статье будет рассмотрено только два: oldconfig и localmodulesconfig. Первый скрипт позволяет в интерактивном режиме заполнить новые поля конфигурации. Для его запуска в папке с исходниками ядра выполните:

make oldconfig

После запуска скрипта вам придется просмотреть все вопросы и ответить на них. Обычно скрипт советует как отвечать и в большинстве случаев можно оставить значение по умолчанию, но если вы сомневаетесь, то можно посмотреть какое значение стоит выбрать в Google. Особое внимание уделяйте пунктам, не отмеченным как NEW, такие настройки не новые и требуют вашего вмешательства.

После ответа на все вопросы можно переходить к следующему шагу. Однако, при таком способе конфигурации ядра останутся включёнными многие ненужные модули, а значит сборка займет много времени, много места на диске (до 20 Гб) и само ядро получится большого размера.

С помощью команды localmodulesconfig можно оптимизировать процесс. Это ответ на вопрос как собрать ядро Linux под свое железо  проще всего. Она работает аналогично предыдущей, только в дополнение к этому проверяет какие модули ядра сейчас загружены и оставляет включёнными только их, сборку всех остальных отключает. Такое ядро соберется намного быстрее, да и вопросов, на которые надо будет ответить будет меньше.

make localmodulesconfig

Здесь обратите внимание на алгоритм сжатия модулей ядра. Лучше оставить без сжатия:

6. Ручная настройка ядра

После того как вы выполнили один из автоматических скриптов настройки ядра, вы можете захотеть настроить что-то дополнительно вручную. Для этого используется команда menuconfig. Она позволяет изменять настройки ядра в псвевдографическом меню. Для его запуска выполните:

make menuconfig

Для перемещения по меню используйте клавиши со стрелками вверх и вниз. Для включения или отключения функции нужно поставить на неё курсор и нажать у (включить), n (отключить), m (включить в виде модуля). Её можно использовать пробел или Enter для переключения состояния включено или выключено. Для открытия пункта конфигурации используйте Enter. Для перехода на уровень выше - Exit. Для перемещения между кнопками используйте стрелки вправо и влево. Всё это написано в окне меню:

Давайте рассмотрим несколько настроек. В разделе General Setup можно включить поддержку получения конфигурации из файла /proc/config.gz. Для этого найдите пункты Kernel .config support и Enable access to .config through /proc/config.gz и поставьте перед ними звездочку с помощью клавиши Enter.

По каждому пункту можно получить справку. Для этого выберите кнопку Help и нажмите Enter:

С помощью пункта Kernel compression mode вы можете выбрать способ сжатия образа ядра. Самый эффективный - LZMA:

Пункт Support for paging of anonymous memory (swap) позволяет включить поддержку подкачки:

Возвращайтесь назад с помощью кнопки Exit, а затем откройте пункт File systems. Здесь можно включить или отключить поддержку файловых систем. Убедитесь, что включена поддержка ext4 и ext3, а также можете включить Btrfs и F2FS:

Самый большой и сложный раздел - это Device drivers в главном меню. Здесь можно включить или отключить поддержку драйверов всех устройств которые поддерживает Linux. Именно в этом разделе вам придется внести большинство настроек если вы собираетесь уменьшить размер своего ядра и не хотите использовать localmodconfig. После завершения настройки нажмите кнопку Save и подтвердите сохранение в файл .config:

 

6. Сборка ядра и установка вручную

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

make

make modules

По умолчанию будет использоваться только одно ядро процессора. Вы можете ускорить сборку попросив программу использовать сразу несколько ядер с помощью опции -j. Например, для сборки в 8 потоков используйте такую команду:

make -j8

После завершения выполнения этих команд сборка ядра Linux будет завершена, дальше необходимо установить ядро. Для этого выполните:

make modules_install

Затем:

make install

Скрипт автоматически обновит конфигурацию Grub и вы сможете перезагрузить компьютер и получить новое ядро:

Но прежде чем идти дальше, давайте рассмотрим ещё один способ сборки ядра.

7. Сборка пакета для Ubuntu

Описанный выше способ установки не очень удобный, поскольку если вы захотите удалить ядро, вам придется это делать вручную. Вместо этого вы можете собрать пакет для своего дистрибутива и установить его с помощью пакетного менеджера. Для сборки deb пакета выполните такую команду:

make deb-pkg

После завершения сборки ядра Linux пакеты появятся на каталог выше каталога с исходниками:

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

sudo dpkg -i ../*.deb

Затем вы можете перезагрузить компьютер и убедится, что теперь используется новое ядро:

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

sudo apt remove linux-headers-5.13.7 linux-image-5.13.7 linux-image-5.13.7-dbg linux-libc-dev

Что делать если ядро не загружается

Если по каким-либо причинам собранное только что ядро не загружается, то ничего страшного ещё не произошло. Вы можете загрузится со старым ядром и начать всё сначала или удалить новое ядро и продолжить использовать систему со старым ядром. Для этого в меню Grub необходимо выбрать пункт Дополнительные параметры, а потом нужную версию ядра, например: 5.11.0.25:

Если меню Grub не отображается, попробуйте зажать перед загрузкой операционной системы клавишу Shift. После авторизации в системе вы можете удалить новое ядро с помощью пакетного менеджера, если использовали его для установки или вручную. Для удаления вручную следует удалить файлы ядра из папки /boot. Например:

sudo rm /boot/vmlinuz-5.13.7
sudo rm /boot/config-5.13.7
sudo rm /boot/initrd.img-5.13.7
sudo rm /boot/System.map-5.13.7
sudo rm -Rf /lib/modules/5.13.7/

А затем необходимо обновить конфигурацию Grub:

sudo update-grub2

После этого в вашей системе останутся только старые ядра.

Выводы

Вот и все. В этой статье мы подробно рассмотрели выполняется сборка ядра Linux из исходников. Это будет полезно всем желающим лучшие понять свою систему, и тем, кто хочет получить самую новую версию ядра в своей системе. Если остались вопросы, задавайте комментарии!

47 комментариев

  1. redeyer 26 января, 2016 Ответить
    • Владимир 6 декабря, 2019 Ответить
  2. fox 17 марта, 2016 Ответить
    • admin 18 марта, 2016 Ответить
    • Серёга 30 ноября, 2018 Ответить
  3. Типичный Юзверь 1 июня, 2016 Ответить
  4. Артур 2 июля, 2016 Ответить
    • admin 2 июля, 2016 Ответить
  5. SpacePony 25 июля, 2016 Ответить
  6. Alex 9 августа, 2016 Ответить
    • admin 9 августа, 2016 Ответить
  7. Alex 10 августа, 2016 Ответить
    • Dmitry Kuznetsov 24 октября, 2016 Ответить
      • admin 24 октября, 2016 Ответить
        • Dmitry Kuznetsov 24 октября, 2016 Ответить
    • Dmitry Kuznetsov 10 ноября, 2016 Ответить
  8. вапвап 24 февраля, 2017 Ответить
  9. Владимир 3 марта, 2017 Ответить
  10. 380979944322maxx 2 апреля, 2017 Ответить
  11. pro100_user 6 мая, 2017 Ответить
    • falciloid 16 ноября, 2018 Ответить
  12. Андрей 17 ноября, 2017 Ответить
    • QDesNik 17 января, 2018 Ответить
    • QDesNik 17 января, 2018 Ответить
  13. chip 13 апреля, 2018 Ответить
  14. Виктор 2 июля, 2018 Ответить
    • Серёга 30 ноября, 2018 Ответить
  15. Dmitry 16 июля, 2018 Ответить
  16. Лука 24 февраля, 2019 Ответить
  17. huiygukui 11 августа, 2019 Ответить
    • admin 11 августа, 2019 Ответить
      • huiygukui 11 августа, 2019 Ответить
      • huiygukui 11 августа, 2019 Ответить
  18. huiygukui 12 августа, 2019 Ответить
  19. huiygukui 12 августа, 2019 Ответить
  20. huiygukui 13 августа, 2019 Ответить
  21. huiygukui 13 августа, 2019 Ответить
  22. Руслан 10 ноября, 2019 Ответить
  23. владимир 1 марта, 2020 Ответить
  24. sdfghh 26 мая, 2020 Ответить
  25. Sergii 3 апреля, 2021 Ответить
  26. Сергей 7 апреля, 2021 Ответить
  27. Кирилл 7 июня, 2021 Ответить
  28. ТОМАР 24 июля, 2021 Ответить
  29. medusa 1 сентября, 2021 Ответить

Ответить

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: