gpt4 book ai didi

linux - 如何在 Yocto 中更改 u-boot 的配置

转载 作者:IT王子 更新时间:2023-10-29 01:25:32 24 4
gpt4 key购买 nike

使用 Yocto 项目为 iMX6 开发板构建 linux,我想更改用于构建 u-boot-imx(iMX 开发板的 u-boot)的 .config - 例如例如,将自动启动延迟更改为 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"

我还将它添加到我的 layer.conf 中的“BBFILES”

我重建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 中搜索“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 来 self 的 bbappend。

搜索 UBOOT_MACHINE,我发现:

# $UBOOT_MACHINE [2 operations]
...
UBOOT_MACHINE=" mx6ull_14x14_evk_config"

这看起来是正确的!

我检查了 u-boot-imx 构建目录中的 .config;它仍然不正确

(我将我层的 defconfig 中的 CONFIG_BOOTDELAY 值与 u-boot-imx 构建目录中的 .config 中的值进行了比较)。

===== 编辑 2 =====

我遵循了下面 LetoThe2nd 的回答附录中的建议 1。即:

  • 为我的评估板构建 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 "
  • 注意使用 patchdir=${S}/configs - 这样 bitbake 就知道在哪里应用补丁,即 [SOURCE DIR]/configs。参见 this question

这成功了! (即我在补丁中放置的调整后的自动启动延迟用于 u-boot-imx)。

我没有尝试过建议 2,因为第一种方法听起来更好。

最佳答案

从技术上讲,您描述的过程对我来说是正确的。但是有几个障碍需要注意,分别需要检查:

  1. 您的 .bbappend 是否已实际处理?

虽然这对你来说似乎是这种情况(你通过调试输出发现)这通常更容易检查:

bitbake-layers show-appends

这将为您提供在当前构建情况下有效的所有附加的完整详细列表。

  1. .bbappend 是否真的达到了预期的效果?

如果涉及多个配方,事情就会变得复杂,并且会相互覆盖。检查

bitbake -e u-boot-imx

看看到底发生了什么。这最好结合管道进入 less(或您选择的寻呼机),然后搜索修改后的值,如 SRC_URI。

  1. 找出您的 u-boot 机器是什么。

鉴于来自 2. 的信息,这相当简单:检查名为的变量

UBOOT_MACHINE

因为这是 u-boot 真正应该看到的。

  1. 尽量不要太详细地告诉 bitbake 要做什么。

特别是组合 -f 和 -c 开关可能会产生意想不到的结果,因为您基本上是在修改任务依赖性。以我的经验,一些事情发生了

bitbake -c clean u-boot-imx && bitbake u-boot-imx

应该工作得更好,因为它贯穿了整个构建依赖性,包括配置、修补等。

编辑/附录

我已经与 OE 开发人员核实过,主要问题是 defconfig 机制是特定于 (linux-) 内核的,这也是内核开发手册中对其进行解释的原因。

因此,要将您的配置放入实际构建中,有一个半解决方案。

  1. 正确的做法:

为 u-boot 源准备一个补丁。在你的情况下,这可能只是对已经在使用的 defconfig 文件的一个小修改。拥有规范格式的补丁并将其添加到 SRC_URI,然后它应该会自动被拾取并执行此操作。

  1. hackish(未经测试,因此只有一半)方式:

以完整格式准备您的配置(不是 defconfig 精简版)。然后将其添加到 SRC_URI 并通过 .bbappend 中的附加任务使用它:

do_compile_prepend() {
cp YOURFILENAME ${S}/.config
}

这应该在编译开始之前直接注入(inject)新配置。它可能需要一些修补,但您肯定明白了。另一种方法是在原始文件上注入(inject) defconfig。

话虽如此,我强烈推荐第一种方式。

关于linux - 如何在 Yocto 中更改 u-boot 的配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47047209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com