如何在Yocto

时间:2017-11-01 02:13:55

标签: linux embedded yocto bitbake

使用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 "
  • 注意使用 patchdir = $ {S} / configs - 所以bitbake知道在哪里应用补丁,即[SOURCE DIR] / configs。请参阅this question

这很有效! (即我在补丁中放入的调整后的自动启动延迟用于u-boot-imx)。

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

3 个答案:

答案 0 :(得分:3)

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

  1. 是你的.bbappend实际处理过的吗?
  2. 虽然这似乎是你的情况(你通过调试输出找到),这通常更容易检查:

    bitbake-layers show-appends
    

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

    1. .bbappend真的有效果吗?
    2. 如果涉及多个配方,事情可能会很复杂,并相互覆盖。检查

      bitbake -e u-boot-imx
      

      看看究竟发生了什么。这最好与管道组合成较少(或您选择的寻呼机),然后搜索修改后的值,如SRC_URI。

      1. 找出你的u-boot机器是什么。
      2. 鉴于来自2.的信息,这是微不足道的:检查名为

        的变量
        UBOOT_MACHINE
        

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

        1. 尽量不要告诉bitbake要做太多细节。
        2. 特别是组合-f和-c开关可能会产生意外结果,因为您基本上修改了任务依赖项。根据我的经验,

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

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

          编辑/附录

          我已经检查过OE开发人员,主要的问题是defconfig机制是(linux-)内核特定的,这也是为什么在kernel-dev手册中对它进行了解释。

          所以为了让你的配置进入实际构建,有一个半解决方案。

          1. 正确的方法:
          2. 为u-boot源准备补丁。在您的情况下,这可能只是对已经使用的defconfig文件的一个小修改。以规范格式获取补丁并将其添加到SRC_URI,然后它应该被自动拾取并执行操作。

            1. hackish(并且未经测试,因此只有一半)方式:
            2. 以完整格式准备配置(而不是defconfig精简版)。然后将其添加到SRC_URI并通过.bbappend中的其他任务使用它:

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

              这应该在编译开始之前直接注入新配置。它可能需要一点点修改,但你肯定会得到这个想法。另一种方法是将defconfig注入原始文件。

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

答案 1 :(得分:0)

没有必要将整个私有.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
}

`

在搜索和替换模式中,

空间完全正常。可以在其中一个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源代码。