使用Yocto项目为iMX6开发板构建linux,我想更改用于构建u-boot-imx的.config(用于iMX开发板的u-boot) - 例如例如,将自动启动延迟更改为1秒。
我可以编辑配置(例如找到构建目录并运行make menuconfig),但是当我运行bitbake重建图像时,它会再次使用默认值覆盖.config。有许多xxx_defconfig文件,我不知道它正在使用它。
我跟随this guide进行了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"
我还把它添加到" BBFILES"在我的layer.conf中
我按如下方式重建u-boot:
bitbake -f -D u-boot-imx -c compile
当我这样做时,构建目录中的.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
我无法看到任何调试输出说有错误(例如找不到我的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
所以看起来它找到了这个层。
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"
file:// defconfig 来自我的bbappend。
为UBOOT_MACHINE设置了Grepping,我找到了:
# $UBOOT_MACHINE [2 operations]
...
UBOOT_MACHINE=" mx6ull_14x14_evk_config"
这看起来是正确的!
我检查了u-boot-imx构建目录中的.config;它还不正确。
(我将defconfig中CONFIG_BOOTDELAY的值与我的图层的值相比较,u-boot-imx的构建目录中的.config值。)
=====编辑2 =====
我在ADDENDUM中按照下面的建议1给LetoThe2的回答。 即:
为我的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 "
这很有效! (即我在补丁中放入的调整后的自动启动延迟用于u-boot-imx)。
我没有尝试过建议2,因为第一种方法听起来更好。
答案 0 :(得分:3)
从技术上讲,你描述的过程听起来对我来说是正确的。但是需要注意几个障碍,分别要检查:
虽然这似乎是你的情况(你通过调试输出找到),这通常更容易检查:
bitbake-layers show-appends
这将为您提供在当前构建情况下生效的所有附加的完整详细列表。
如果涉及多个配方,事情可能会很复杂,并相互覆盖。检查
bitbake -e u-boot-imx
看看究竟发生了什么。这最好与管道组合成较少(或您选择的寻呼机),然后搜索修改后的值,如SRC_URI。
鉴于来自2.的信息,这是微不足道的:检查名为
的变量UBOOT_MACHINE
因为这是u-boot真正应该看到的。
特别是组合-f和-c开关可能会产生意外结果,因为您基本上修改了任务依赖项。根据我的经验,
bitbake -c clean u-boot-imx && bitbake u-boot-imx
应该更好,因为它贯穿整个构建依赖,包括配置,修补等。
编辑/附录
我已经检查过OE开发人员,主要的问题是defconfig机制是(linux-)内核特定的,这也是为什么在kernel-dev手册中对它进行了解释。
所以为了让你的配置进入实际构建,有一个半解决方案。
为u-boot源准备补丁。在您的情况下,这可能只是对已经使用的defconfig文件的一个小修改。以规范格式获取补丁并将其添加到SRC_URI,然后它应该被自动拾取并执行操作。
以完整格式准备配置(而不是defconfig精简版)。然后将其添加到SRC_URI并通过.bbappend中的其他任务使用它:
do_compile_prepend() {
cp YOURFILENAME ${S}/.config
}
这应该在编译开始之前直接注入新配置。它可能需要一点点修改,但你肯定会得到这个想法。另一种方法是将defconfig注入原始文件。
话虽如此,我强烈推荐第一种方式。
答案 1 :(得分:0)
没有必要将整个私有.config
文件复制到u-boot构建文件夹中,如果需要更改defconfig中的某些设置,sed
在do_compile_prepend
方法中工作得非常好太。例如:
`
do_configure_prepend() {
sed -i -e 's,CONFIG_DEFAULT_DEVICE_TREE=,CONFIG_DEFAULT_DEVICE_TREE= ${BOARD_DEVICE_TREE},g' ${S}configs/mx7ulp_evk_defconfig
}
`
在搜索和替换模式中,空间完全正常。可以在其中一个Yocto配置文件中定义${BOARD_DEVICE_TREE}
。此方法也适用于已使用基于配方的补丁列表修补的源/头文件。
答案 2 :(得分:0)
可以将defconfig添加为常规文件,例如,我粘贴一些有效的bbappend:
PR = "r7"
BRANCH = "ti-u-boot-2020.01"
SRCREV = "ae8ceb7b6e3acb4bc90f730e33dafc7b65066591"
FILESEXTRAPATHS_prepend := "${THISDIR}:"
SRC_URI += "file://0001-Add-am335x-cmpc30-target.patch \
file://am335x-cmpc30.dts;subdir=git/arch/arm/dts \
file://am335x_cmpc30_defconfig;subdir=git/configs/ \
"
因此“ file:// am335x_cmpc30_defconfig; subdir = git / configs /”行实际上将整个defconfig放入了u-boot源代码。