KBUILD_DEFCONFIG_KMACHINE ?= defconfig_file 无法按预期工作

joh*_* s. 3 linux-kernel yocto

KBUILD_DEFCONFIG_KMACHINE ?= defconfig_file没有按我的预期工作。

我学到的第一课:defconfig != .config

arch/arm/config/xy_defconfigBare-Kernel-Build(不带 yocto):下面创建的新 defconfig 文件make savedefconfig不等于该.config文件。我假设 Linux 内核扩展了一些符号并创建了最终的.config.

Yocto-Build:问题来了:Yocto 无法正确处理下面的 defconfig 文件arch/arm/config/xy_defconfig。当使用 yocto 构建 linux 内核时,内核的大小是一半且无法启动。这是因为 yocto 不会扩展 .config 中缺失的符号,而 amake defconfig会这样做。

你如何处理这个问题?

更新:

想出一个额外的make xy_defconfig方法并创建正确的 .config 文件。这是一个丑陋的黑客,非常欢迎任何更好的想法。

将其添加到我的自定义linux-xy.bb文件中。

KBUILD_DEFCONFIG ?= xy_defconfig

do_makedefconfig() {
     oe_runmake -C ${B} ARCH=${ARCH} $KBUILD_DEFCONFIG
}

addtask do_makedefconfig after do_configme before do_compile
Run Code Online (Sandbox Code Playgroud)

yoc*_*com 5

  1. 首先将 defconfig 复制到 resources/meta-mylayer/recipes-kernel/linux 并为 linux 配方编写 .bbappend 文件

linux-ti_%.bbappend

FILESEXTRAPATHS_prepend : "${THISDIR}:"
SRC_URI += "file://your-defconfig" 
Run Code Online (Sandbox Code Playgroud)

2.打开sources/meta-mylayer/conf/machine/your-machine.conf添加以下行,搜索宏(如果已经存在或不使用)grep -inr "INTREE_DEFCONFIG"

INTREE_DEFCONFIG_pn-linux-ti = "am335x_phytec_defconfig"
Run Code Online (Sandbox Code Playgroud)

如果宏已存在于同一文件中,请替换 defconfig 名称。