Linux kernel KBUILD\u DEFCONFIG\u KMACHINE?=DEFCONFIG\u文件未按预期工作

Linux kernel KBUILD\u DEFCONFIG\u KMACHINE?=DEFCONFIG\u文件未按预期工作,linux-kernel,yocto,Linux Kernel,Yocto,KBUILD\u DEFCONFIG\u KMACHINE?=DEFCONFIG\u文件无法按预期工作 我学到的第一课:defconfig!=。配置 裸内核构建(不带yocto):由make savedefconfig创建的arch/arm/config/xy_defconfig下面的新defconfig文件不等于.config文件。我假设linux内核展开一些符号并创建最终的.config Yocto构建:问题来了:Yocto无法正确处理下面的defconfig文件arch/arm/confi

KBUILD\u DEFCONFIG\u KMACHINE?=DEFCONFIG\u文件
无法按预期工作

我学到的第一课:
defconfig!=。配置

裸内核构建(不带yocto):由
make savedefconfig
创建的
arch/arm/config/xy_defconfig
下面的新defconfig文件不等于
.config
文件。我假设linux内核展开一些符号并创建最终的
.config

Yocto构建:问题来了:Yocto无法正确处理下面的defconfig文件
arch/arm/config/xy\u defconfig
。使用yocto构建linux内核时。。内核大小为一半,无法启动。这是因为yocto不会展开.config中缺少的符号,而
make defconfig
会这样做

你如何处理这个问题

更新:

找到一个额外的
使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
  • 首先将defconfig复制到sources/meta-mylayer/recipes-kernel/linux 并为linux编写一个.bbappend文件
  • linux-ti_u2;bbappend

    FILESEXTRAPATHS_prepend : "${THISDIR}:"
    SRC_URI += "file://your-defconfig" 
    
    二,。开源/meta-mylayer/conf/machine/your-machine.conf添加到下面一行, 使用
    grep-inr“INTREE\u DEFCONFIG”

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

    内核yocto
    方法
    KBUILD\u DEFCONFIG
    变量由
    kernel yocto
    类处理,因此您需要继承它。它通常是通过include file
    linux yocto.inc
    间接完成的,因此您应该在linux配方中使用这一行:

    require recipes-kernel/linux/linux-yocto.inc
    
    请注意,
    KBUILD\u DEFCONFIG\u KMACHINE
    由两部分组成。第一个是变量名(
    KBUILD\u DEFCONFIG
    ),第二个是内核机器覆盖(
    KMACHINE
    )。因此,您需要更改覆盖以适应您的机器。这就是为什么
    KMACHINE
    部分在文档[1]中用斜体书写的原因。文档中有一个RPi示例:

    KBUILD_DEFCONFIG_raspberrypi2 = "bcm2709_defconfig"
    
    默认情况下,
    linux yocto.inc
    中的
    KMACHINE
    设置为
    MACHINE
    变量

    手动在树defconfig中处理 我们在树defconfig中使用的是
    内核yocto
    类<代码>linux.inc来自
    元oe
    层。我不知道这是不是最好的做法。以下是我们的linux配方(它被缩减到最低限度):



    [1]

    谢谢您的重播,但这正是我不想要的。在开发过程中,defconfig文件可能会更改。。因此,有效的defconfig文件始终在树中,不应在yocto配方中作为副本交付。否则,你总是要手动更新配方。Thx的回复,但你也没有得到我的观点
    您的_defconfig
    .config
    不相等,这导致在第一次运行时:
    make ARCH=arm您的_defconfig
    处于裸内核构建中。我的经验是,Yocto无法将
    defconfig
    扩展为完整的
    .config
    文件。所有这些构建测试都会导致内核无法工作,只有裸构建的一半大小。请看我的更新。。在原来的问题中。@johns。只是一个想法-您是否有正确的内核映像类型(即压缩/未压缩类型)?因为一半大小的内核映像真的很奇怪。顺便说一句:为什么defconfig!=。配置在此问题中:。还有一点:请参阅
    meta-openembedded/meta-oe/recipes-kernel/linux/linux.inc
    (如果使用)-它会根据您的openembedded配置稍微更新内核配置。
    KBUILD_DEFCONFIG_raspberrypi2 = "bcm2709_defconfig"
    
    require recipes-kernel/linux/linux.inc
    
    PV = "your_version"
    SRC_URI = "your_sources"
    
    do_configure_prepend() {
        bbnote "Copying defconfig"
        cp ${S}/arch/${ARCH}/configs/YOUR_defconfig ${WORKDIR}/defconfig
    }