根据以前的配置构建新内核时,有没有办法自动化该make oldconfig
过程,以便将新选项设置为其默认值?
编辑:我的意思是,当在较新的内核上使用 .config(来自/boot/config-*
或)时,该过程将询问您是否要启用旧内核中不可用的选项。您可以回答 Y/n/m 或按 Enter 接受默认值。我希望自动接受默认值,无需用户交互。/proc/config.gz
make 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
这样就不会有人问问题了。