为什么 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
文件的路径,您必须复制旧文件以将更改考虑在内。
我想为 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
文件的路径,您必须复制旧文件以将更改考虑在内。