This is an old revision of the document!
Table of Contents
Компиляция ядра Linux
Обычная компиляция
Скачать исходники ядра нужной версии
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.8.18.tar.xz
Распаковать архив
tar -xf linux-5.8.18.tar.xz
Установить необходимые для сборки пакеты (ALT Linux)
sudo apt-get install libssl-devel libelf-devel /usr/bin/x86_64-alt-linux-gcc ncurses-devel /usr/bin/flex /usr/bin/bison /usr/bin/pahole
Скопировать конфигурационный файл от текущего ядра в каталог с распакованными исходниками
sudo cp /boot/config-5.8.14-un-def-alt1 .config
Выполнить конфигурирование при необходимости
make menuconfig
На этом этапе можно выбрать, какие модули ядра будут компилироваться и как: в виде отдельного файла *.ko или внутри самого ядра. В данном случае выделенный драйвер сетевой карты будет внутри ядра.
Драйвер RAM-диска будет в виде модуля, приведены его параметры по умолчанию
Отключение отладочной информации
scripts/config --disable DEBUG_INFO
Компиляция
make -j`nproc`
Установка и проверка ее результатов
sudo make modules_install ls /lib/modules/5.8.18 sudo make install sudo ls -l /boot/initrd.img /boot/vmlinuz
Оптимизированная компиляция
Можно собрать ядро под конкретный процессор, чтобы применялись наиболее оптимальные алгоритмы и машинные команды. Для этого откройте Makefile и допишите в переменную KBUILD_USERCFLAGS параметры
"-march=native -flto -O3"
При использовании последнего могут быть дефекты, лучше компилировать с O2.
Также можно избавиться от модулей, ненужных на вашем оборудовании, и вкомпилировать в само ядро те модули, которые точно нужны. Если встроить драйвер дисковой подсистемы в ядро, загрузка cможет осуществляться без использования initrd. Это позволит сократить время на загрузку системы, ведь в оперативную память не придётся загружать образ ram-диска, который обычно бывает больше ядра, и не надо будет выполнять инициализацию, предполагаемую initrd.
Выключение подписи модулей
scripts/config --disable MODULE_SIG
https://lecorbeausvault.wordpress.com/2022/04/26/building-a-minimal-custom-linux-kernel-on-debian/
