Неинтерактивная конфигурация ядра linux

Есть ли какой-либо метод для настройки ядра Linux таким образом (просто пример):

make config CONFIG_OPTION=y && make config CONFIG_OPTION1=no CONFIG_OPTION3=64 CONFIG_OPTION4=/path/

и все зависимости и альтернативы этих параметров конфигурации будут автоматически установлены в неинтерактивном режиме.

Вариант I:

Инструмент qconfig , похоже, служит цели, хотя и зависит от того, какой интерфейс вы предпочитаете. Он принимает входной файл с CONFIG_ directives которые вы хотите изменить, и изменяет их. Я еще не пробовал.

Я еще не пробовал, но не похоже, что у него есть интерфейс через аргументы командной строки, в соответствии с тем, что вы описали.

Вариант II:

sed -i 's:CONFIG_X=y:# CONFIG_X is not set:g' .config

Странно, что неинтерактивная конфигурация, похоже, вообще не обращает внимания. Это, конечно, неприменимо в целом, но когда вам нужно просто перевернуть несколько переключателей (с небольшими или никакими зависимостями), например, сделать мишень, тогда это будет очень полезно, удобнее, чем напрямую с помощью sed , и лучше, чем поддерживая .config-with-X , .config-without-X .

Самый простой способ – собрать файл .config с необходимыми параметрами. Разумеется, это потребует всех параметров конфигурации, поэтому это применимо в случае незначительных изменений в существующем интерактивном файле .config .

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

Конфигурационные фрагменты

scripts/kconfig/merge_config.sh

Применение:

 git checkout v4.9 make x86_64_defconfig grep -E 'CONFIG_(DEBUG_INFO|GDB_SCRIPTS)[= ]' .config # # CONFIG_DEBUG_INFO is not set # GDB_SCRIPTS depends on CONFIG_DEBUG_INFO in lib/Kconfig.debug cat <<EOF >.config-fragment CONFIG_DEBUG_INFO=y CONFIG_GDB_SCRIPTS=y EOF # Order is important here. Must be first base config, then fragment. ./scripts/kconfig/merge_config.sh .config .config-fragment grep -E 'CONFIG_(DEBUG_INFO|GDB_SCRIPTS)[= ]' .config # CONFIG_DEBUG_INFO=y # CONFIG_GDB_SCRIPTS=y 

Замена процесса не работает:

 ./scripts/kconfig/merge_config.sh arch/x86/configs/x86_64_defconfig \ <( printf 'CONFIG_DEBUG_INFO=y\nCONFIG_GDB_SCRIPTS=y\n' ) 

из-за: https://unix.stackexchange.com/a/164109/32558

Buildroot автоматизирует его с помощью BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES : https://stackoverflow.com/questions/1414968/how-do-i-configure-the-linux-kernel-within-buildroot

merge_config.sh – простой интерфейс для цели make alldefconfig .