为什么 make savedefconfig 删除条目?

Why is make savedefconfig removing entries?

我想为 Yocto 发行版添加条目到供应商提供的 defconfig。为了添加我想要的新驱动程序,我通常在我的 Linux 目录中使用以下过程:

$ cp $YOCTO_MYKERNEL/files/defconfig .config
$ make menuconfig
$ # I select some drivers I want to add and save .config file
$ make savedefconfig
$ cp defconfig $YOCTO_MYKERNEL/files/defconfig

savedefconfig 步骤正确添加了我的驱动程序,但也删除了供应商提供的一些重要驱动程序:

$ diff -u $YOCTO_MYKERNEL/files/defconfig defconfig
--- $YOCTO_MYKERNEL/files/defconfig
+++ defconfig
@@ -1,22 +1,11 @@
-CONFIG_FHANDLE=y
 CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
 CONFIG_CGROUPS=y
 CONFIG_BLK_DEV_INITRD=y
-CONFIG_PERF_EVENTS=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
-CONFIG_ARCH_SUNXI=y
 CONFIG_SMP=y
 CONFIG_NR_CPUS=8
-CONFIG_AEABI=y
-CONFIG_HIGHMEM=y
-CONFIG_ARM_APPENDED_DTB=y
-CONFIG_ARM_ATAG_DTB_COMPAT=y
-CONFIG_CPU_FREQ=y
-CONFIG_CPUFREQ_DT=y
-CONFIG_VFP=y
-CONFIG_NEON=y
[...]

如果我很好地理解 savedefconfig 步骤,它会删除默认情况下已设置的选项,因此是多余的。然而,删除所有这些供应商提供的驱动程序会导致新编译的内核在 uboot 后根本无法启动。

我什至只尝试了 savedefconfig 步骤,没有添加任何驱动程序,供应商驱动程序被删除,内核挂起。

您知道 savedefconfig 为什么要删除这些条目吗?如何停止?目前我必须手动隔离差异更改并手动将我感兴趣的新行添加到 Yocto defconfig 文件中。

我找到了所有这一切的原因:我在调用 make savedefconfig 时没有指定 ARM 架构,因此我认为构建系统将删除所有非相关条目,如所有 SUNXI_*驱动程序(因为它们未在 x86_64 上使用)。

此调用不会破坏重要的驱动程序:

make ARCH=arm savedefconfig

为了不忘记执行此步骤,可以使用 Yocto 步骤代替,它将自动使用相关架构:

bitbake -c menuconfig virtual/kernel
bitbake -c savedefconfig virtual/kernel

Bitbake 将打印生成的 defconfig 文件的路径,您必须复制旧文件以将更改考虑在内。