在内核树上执行“make oldconfig”时自动回答默认值

在内核树上执行“make oldconfig”时自动回答默认值

根据以前的配置构建新内核时,有没有办法自动化该make oldconfig过程,以便将新选项设置为其默认值?

编辑:我的意思是,当在较新的内核上使用 .config(来自/boot/config-*或)时,该过程将询问您是否要启用旧内核中不可用的选项。您可以回答 Y/n/m 或按 Enter 接受默认值。我希望自动接受默认值,无需用户交互。/proc/config.gzmake oldconfig

答案1

使用命令:

yes "" | make oldconfig

'yes' 命令重复输出一行包含所有指定字符串的内容,默认为 'y'。

因此,您可以使用它简单地“按回车键”,这将导致使用“make oldconfig”命令的默认值。

答案2

make olddefconfig

就是你想要的。从帮助(make help在内核源代码目录中):

olddefconfig - 与 silentoldconfig 相同,但将新符号设置为其默认值

答案3

是的。它存储在源目录顶层的“.config”中。

此外,如果使用发行版内核,某些发行版(例如 RedHat)会将其存储在 /boot/config-$(uname -r) 中。(内核版本)[1]

最后,如果在您正在运行的内核中编译,则可在 /proc/config.gz 中使用。我忘记哪个版本引入了此选项。

[1] 这些选项:

CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y 

编辑

查看 /usr/src/linux/kernel/Documentation/kbuild/kconfig.txt(或适当的路径)。您可以使用他们的一些建议来编写解决方案脚本。我会结合使用脚本和 textutils 来实现您描述的内容。

编辑2

另外需要注意的是,这不是一个好主意。如果您环境特有的可选硬件支持发生变化但不是默认的,该怎么办?如果发生负面影响的变化怎么办?这确实应该是交互式的。您可以进行配置并自动完成其余操作。

“make silentoldconfig” 稍微简洁一些,这可能会有所帮助。它仍然是交互式的。

答案4

虽然这是一个老问题,但我从未找到 OP 问题的好答案。

我找到了另一种解决交互式问题的方法;我没有修补 .config,而是修补了 defconfig 文件,即

make ARCH=arm mrproper
patch -N -p1 < ../../patches/autofs.patch || true
make ARCH=arm xilinx_zynq_defconfig
make ARCH=arm UIMAGE_LOADADDR=0x8000 uImage
make ARCH=arm modules
make ARCH=arm INSTALL_MOD_PATH=target modules_install

我的情况中的补丁:

--- a/arch/arm/configs/xilinx_zynq_defconfig    2019-12-12 08:31:42.985777534 +0100
+++ b/arch/arm/configs/xilinx_zynq_defconfig    2019-12-12 08:31:46.695777606 +0100
@@ -221,6 +221,7 @@
 CONFIG_XILINX_PR_DECOUPLER=y
 CONFIG_EXT2_FS=y
 CONFIG_EXT3_FS=y
+CONFIG_AUTOFS4_FS=y
 # CONFIG_DNOTIFY is not set
 CONFIG_MSDOS_FS=y
 CONFIG_VFAT_FS=y

这样就不会有人问问题了。

相关内容