Я использую Gentoo, и обычный путь к сборке лежит через make nconfig
, что чревато тем, что рано или поздно ты забываешь о том, какую конфигурацию ты используешь. Файл .config
в этом не помошник, так как он не отделяет выбранные пользователем параметры от тех, которые выбрались по зависимости.
В директории /usr/src/local у меня находится файл Kconfig примерно такого содержания:
config LENOVO_G500
bool "Lenovo G500"
default y
# crypto
select DM_CRYPT
select CRYPTO_AES_NI_INTEL
select CRYPTO_USER_API_SKCIPHER
# qemu
select KVM
select KVM_INTEL
# ethernet
select ALX
# wireless card
select ATH_CARDS
select ATH9K
select CFG80211_WEXT
Спецификацию формата можно подробно узнать в документации к ядру https://github.com/torvalds/linux/blob/master/Documentation/kbuild/kconfig-language.txt, но на деле придется пользоваться только select SOMETHING
, что выбирает CONFIG_SOMETHING
таким же образом, как это было бы выбрано с помощью nconfig.
В основной файл Kconfig ядра добавляется созданный файл Kconfig
echo 'source "../local/Kconfig"' >> /usr/src/linux/Kconfig
С помощью make nconfig
привычным образом находим нужные нам опции, после чего добавляем их в файл /usr/src/local/Kconfig
.
Сборка ядра теперь выглядит таким образом
make defconfig
make -j$(nproc)
Вся конфигурация ядра прозрачна, и больше не нужно вспоминать те опции, которые были выбраны, при этом при сборке нового ядра достаточно добавить одну строчку в /usr/src/linux/Kconfig
. Единственным недостатком является отсутствие возможности выбрать с помощью Kconfig
определенную опцию модулем. Если кто-то знает как это сделать – напишите мне на почту, пожалуйста, а то я уже всерьез намереваюсь отправлять патчи в апстрим.
На деле, как я думаю очевидно, я не выполняю все перечисленные команды руками, поэтому вот небольшие скрипты:
user@localhost /usr/src $ cat run_after_update.sh
#!/bin/bash
grep local /usr/src/linux/Kconfig && exit
echo 'source "../local/Kconfig"' >> /usr/src/linux/Kconfig
/usr/src/rebuild.sh
emerge @module-rebuild
user@localhost /usr/src $ cat rebuild.sh
#!/bin/bash
set -eux
cd /usr/src/linux
make defconfig
make -j9
make modules
make modules_install
make install
genkernel initramfs --luks --lvm
grub-mkconfig -o /boot/grub/grub.cfg