繁体   English   中英

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

[英]How to change the config of u-boot in 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"

我还将它添加到 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

在 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,我发现:

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

这看起来是正确的!

我检查了 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 "
  • 注意使用patchdir=${S}/configs - 所以 bitbake 知道在哪里应用补丁,即 [SOURCE DIR]/configs。 看到这个问题

这有效! (即我在补丁中设置的调整后的自动启动延迟用于 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
}

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

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

没有必要将整个私有.config文件复制到 u-boot 构建文件夹中,如果有必要更改 defconfig 中的一些设置, seddo_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
}

`

搜索和替换模式中的空格完全可以。 ${BOARD_DEVICE_TREE}可以在 Yocto 配置文件之一中定义。 此方法也适用于已使用基于配方的补丁列表修补的源/头文件。

可以将 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 源代码中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM