有没有什么方法可以以这种方式配置linux内核(只是一个例子):
make config CONFIG_OPTION=y && make config CONFIG_OPTION1=no CONFIG_OPTION3=64 CONFIG_OPTION4=/path/
并且这些配置选项的所有依赖项和替代项都将在非交互模式下自动设置。
答案1
选项一:
这qconfig工具似乎可以达到目的,尽管这取决于您喜欢的界面。它需要一个包含CONFIG_ directives
您想要更改的输入文件,然后更改它们。我还没尝试过。
我还没有尝试过,但看起来它没有通过命令行参数的接口,按照您所描述的方式。
选项二:
sed -i 's:CONFIG_X=y:# CONFIG_X is not set:g' .config
奇怪的是,非交互式配置似乎根本没有引起人们的注意。它当然不适用于一般情况,但是当您只需要翻转几个开关(很少或没有依赖项)时,例如 make 目标,那么它将非常有用,比直接使用更用户友好sed
,并且比维护更好.config-with-X
, .config-without-X
.
答案2
最简单的方法是.config
使用所需的选项手动构建文件。这当然需要全部给出的配置选项,因此它适用于对现有交互式创建的.config
文件进行微小更改的情况。
如果您询问使用当前.config
但仅通过更改一些标志make
,那么我不知道。但您可能会尝试.config
通过脚本编辑文件,然后运行make
.
答案3
答案移至:如何编写 make menuconfig 脚本来自动化 Linux 内核构建配置?
配置片段
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
merge_config.sh
是目标的简单前端make alldefconfig
。
交叉编译时,ARCH
运行时必须导出merge_config.sh
,例如:
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
make defconfig
./scripts/kconfig/merge_config.sh .config .config-fragment
Buildroot 使用以下命令实现自动化BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES
:https://stackoverflow.com/questions/1414968/how-do-i-configure-the-linux-kernel-within-buildroot