Jer*_*emy 7 linux embedded bitbake yocto
使用 Yocto 项目为 iMX6 开发板构建 linux,我想更改用于构建 u-boot-imx(iMX 开发板的 u-boot)的 .config - 例如将自动启动延迟更改为 1 秒作为例子。
我可以编辑配置(例如找到构建目录并运行 make menuconfig),但是当我运行 bitbake 来重建映像时,它会再次使用默认值覆盖 .config。xxx_defconfig 文件很多,不知道用的是哪个。
我按照本指南使用 Yocto 项目进行内核配置。我对 .config 文件进行了更改,并将其复制到我的图层并重命名为“defconfig”。我用u-boot-imx_2017.03.bbappend创建了一个新层来扩展u-boot-imx_2017.03.bb(u-boot-imx 的配方)。
这是我的u-boot-imx_2017.03.bbappend
FILESEXTRAPATHS_prepend := "${THISDIR}:"
SRC_URI += "file://defconfig"
Run Code Online (Sandbox Code Playgroud)
我还将它添加到 layer.conf 中的“BBFILES”
我重建 u-boot 如下:
bitbake -f -D u-boot-imx -c compile
Run Code Online (Sandbox Code Playgroud)
当我这样做时,构建目录中的 .config 文件将恢复为默认配置(不是我更改的版本),并且生成的 u-boot 二进制文件没有更改(启动延迟仍为 3 秒)。
我认为我的图层正在被处理,因为我在输出中看到了这一点:
DEBUG: Appending .bbappend file /home/bob/yocto/morty/sources/meta-mylayer/imx/meta-bsp/recipes-bsp/u-boot/u-boot-imx_2017.03.bbappend to /home/bob/yocto/morty/sources/meta-fsl-bsp-release/imx/meta-bsp/recipes-bsp/u-boot/u-boot-imx_2017.03.bb
Run Code Online (Sandbox Code Playgroud)
我看不到任何调试输出说有错误(例如,找不到我的 defconfig 文件)。
如何使用 Yocto 对 u-boot 配置进行这种更改?
===== 编辑 =====
我按照下面 LetoThe2nd 的回答中的说明进行操作。这是我发现的:
bitbake-layers show-appends
有用!在我看到的层中:
u-boot-imx_2017.03.bb:
/home/bob/yocto/morty/sources/meta-mylayer/imx/meta-bsp/recipes-bsp/u-boot/u-boot-imx_2017.03.bbappend
Run Code Online (Sandbox Code Playgroud)
所以看起来它找到了图层。
bitbake -e -c clean u-boot-imx | tee build.log
在 build.log 中搜索“SRC_URI”,我发现了这个:
# $SRC_URI [6 operations]
...
# pre-expansion value:
# "${UBOOT_SRC};branch=${SRCBRANCH} file://defconfig"
SRC_URI="git://git.freescale.com/imx/uboot-imx.git;protocol=git;branch=imx_v2017.03_4.9.11_1.0.0_ga file://defconfig"
Run Code Online (Sandbox Code Playgroud)
该文件:// defconfig来自我bbappend。
寻找 UBOOT_MACHINE,我发现:
# $UBOOT_MACHINE [2 operations]
...
UBOOT_MACHINE=" mx6ull_14x14_evk_config"
Run Code Online (Sandbox Code Playgroud)
这看起来是正确的!
我检查了 u-boot-imx 构建目录中的 .config;它仍然不正确。
(我将我层的 defconfig 中 CONFIG_BOOTDELAY 的值与 u-boot-imx 的构建目录中的 .config 中的值进行了比较)。
===== 编辑 2 =====
我遵循了下面对 LetoThe2nd 的回答的附录中的建议 1。IE:
为我的 evk 板构建 u-boot-imx 时使用的 xxx_defconfig 文件创建补丁(在本例中为[SOURCE DIR]/configs/mx6ull_14x14_evk_defconfig)
使用 .bbappend 将补丁放在我的图层目录中
将 .bbappend 更改为以下行:
_
FILESEXTRAPATHS_prepend := "${THISDIR}:"
SRC_URI += " file://mx6ull_14x14_evk_defconfig.patch;patchdir=${S}/configs "
Run Code Online (Sandbox Code Playgroud)
这有效!(即我在补丁中设置的调整后的自动启动延迟用于 u-boot-imx)。
我没有尝试过建议 2,因为第一种方法听起来更好。
从技术上讲,您描述的过程对我来说听起来是正确的。但是有几个障碍需要注意,分别需要检查:
虽然这对你来说似乎是这种情况(你通过调试输出发现)这通常更容易检查:
bitbake-layers show-appends
Run Code Online (Sandbox Code Playgroud)
这将为您提供在当前构建情况下有效的所有附加的完整详细列表。
如果涉及多个配方,事情可能会变得复杂,并相互覆盖。检查
bitbake -e u-boot-imx
Run Code Online (Sandbox Code Playgroud)
看看实际发生了什么。这最好与管道结合到less(或您选择的寻呼机),然后搜索修改后的值,如SRC_URI。
鉴于 2. 中的信息,这很简单:检查名为
UBOOT_MACHINE
Run Code Online (Sandbox Code Playgroud)
因为这是 u-boot 真正应该看到的。
特别是结合 -f 和 -c 开关可能会产生意想不到的结果,因为您基本上是在修补任务依赖项。根据我的经验,一些东西
bitbake -c clean u-boot-imx && bitbake u-boot-imx
Run Code Online (Sandbox Code Playgroud)
应该工作得更好,因为它经历了整个构建依赖项,包括配置、修补等。
编辑/附录
我已经检查过 OE 开发人员,主要问题是 defconfig 机制是 (linux-) 内核特定的,这也是内核开发手册中解释它的原因。
因此,要将您的配置纳入实际构建,有一个半解决方案。
准备 u-boot 源的补丁。在您的情况下,这可能只是对已经在使用的 defconfig 文件的一个小修改。使用规范格式的补丁并将其添加到 SRC_URI,然后它应该会自动被选中并执行此操作。
以完整格式准备您的配置(不是 defconfig 精简版)。然后将其添加到 SRC_URI 并通过 .bbappend 中的附加任务使用它:
do_compile_prepend() {
cp YOURFILENAME ${S}/.config
}
Run Code Online (Sandbox Code Playgroud)
这应该在编译开始之前直接注入新配置。它可能需要一些修补,但你肯定明白这个想法。另一种方法是将 defconfig 注入原始文件。
话虽如此,我强烈推荐第一种方式。