【问题标题】:Nothing provides error - adding new Yocto layer and new machine没有提供错误 - 添加新的 Yocto 层和新机器
【发布时间】:2020-10-02 14:06:58
【问题描述】:

我有一个关于在 Yocto 中添加新机器的问题。

我正在尝试在 Yocto 中添加一个新层和一台新机器。该机器基于 Atmels SAMA5D27-SOM1-EK-SD 评估板。我想为这块板启用另一个 UART。

我克隆了该板的内核源代码 (linux-at91) 并添加了另一个基于 at91sama5d27-som1-ek-sd.dts 文件的 DTS 文件。我进行了更改以启用 UART0。然后我将这个新的 DTS 文件添加到 linux-at91/arch/arm/boot/dts 的 Makefile 中。我做了一个补丁来保存这些更改。

我正在使用 meta-atmel 层,并按照here 概述的说明为该板构建映像。

我已经定义了另一个层,它将充当定义我的自定义机器的新 Yocto 层。我在 recipes-kernel 中添加了一些 .bbappend 文件来添加补丁(它向 linux at91 内核源代码添加了一个新的 dts 文件)并将我们的自定义机器添加为兼容机器。我的理解是,我们可以继续使用 meta-atmel 层中的定义,但在同一路径中的 meta-axon 层中添加 .bbappend 文件,这将应用我们想要的更改。

我对 recipes-bsp 目录做了同样的事情。在 meta-axon 层,recipes-bsp 中的所有 .bbappend 文件仅将我们的自定义机器添加到兼容机器列表中。 但是,当我继续构建时,出现此错误:

NOTE: Resolving any missing task queue dependencies ERROR: Nothing PROVIDES 'at91bootstrap-sam-ba' at91bootstrap-sam-ba was skipped: incompatible with machine axon-ft3-sp-machine (not in COMPATIBLE_MACHINE)

我很困惑,因为在 meta-atmel 中定义 at91bootstrap-sam-ba 的配方文件没有提到任何兼容的机器,所以我想从 meta-atmel 层使用它而不需要更改它。 (已编辑)

【问题讨论】:

    标签: linux yocto atmel atsam3x


    【解决方案1】:

    它确实提到了兼容的机器。

    在 at91bootstrap-sam-ba recipe[1] 中,您可以找到以下行:

    require at91bootstrap_${PV}.bb
    

    让我们看看这个食谱然后[2]:

    COMPATIBLE_MACHINE = '(sama5d3xek|sama5d3-xplained|sama5d3-xplained-sd|at91sam9x5ek|at91sam9rlek|at91sam9m10g45ek|sama5d4ek|sama5d4-xplained|sama5d4-xplained-sd|sama5d2-xplained|sama5d2-xplained-sd|sama5d2-xplained-emmc|sama5d2-ptc-ek|sama5d2-ptc-ek-sd|sama5d27-som1-ek|sama5d27-som1-ek-sd|sama5d2-icp-sd|sam9x60ek|sam9x60ek-sd|sama5d27-wlsom1-ek-sd)'
    

    使用bitbake at91bootstrap-sam-ba -e 会告诉您,确实,COMPATIBLE_MACHINE 已设置,甚至会告诉您设置的位置。

    PS:在某些情况下,对于您的自定义机器来说,要求它所基于的原始机器(例如sama5d27-som1-ek-sd)并将原始机器的名称作为MACHINE_OVERRIDES 的一部分实际上可能是一个好主意,所以您不必为每个带有COMPATIBLE_MACHINE 的食谱添加 bbappend。注意MACHINE_OVERRIDES 中的顺序,它是从右到左评估的,最右边的OVERRIDES 具有最高优先级。 (使用bitbake -e <recipe> 确保设置正确)。

    [1]https://github.com/linux4sam/meta-atmel/blob/master/recipes-bsp/at91bootstrap/at91bootstrap-sam-ba_3.9.2.bb#L1

    [2]https://github.com/linux4sam/meta-atmel/blob/master/recipes-bsp/at91bootstrap/at91bootstrap_3.9.2.bb#L5

    【讨论】:

    • 我明白你的意思,但我将自定义机器添加到 meta-/recipes-bsp/at91bootstrap 中的 at91bootstrap_${PV}.bbappend,所以我希望它应该添加机器。我不想对实际的 at91bootstrap-sam-ba 配方进行任何更改。
    • 这是我从未想过的有趣做法。 1)我认为 bbappend 机制不适用于所需或包含的 .bb 文件。您仍然可以在 at91bootstrap-sam-ba_%.bbappend 中将您的机器添加到 COMPATIBLE_MACHINE。 2) 如果 1) 起作用(直觉是没有),你不能在配方的实际文件名(或 bbappend)中使用 ${PV},所以要么 at91bootstrap_%.bbappend 要么用你的版本替换 % '正在定位。
    • 我的意思是,我在 at91bootstrap_${PV}.bbappend(不是 at91bootstrap-sam-ba_%.bbappend)中的 COMPATIBLE_MACHINE 中添加了我的机器,因为您说包含 COMPATIBLE_MACHINE在 at91bootstrap-sam-ba_%.bbappend 通过所需的 at91bootstrap_${PV}.bbappend 文件。此外,${PV} 适当地替换为所需文件的版本号。我没有 at91bootstrap-sam-ba_${PV}.bbappend 文件。我想要这台机器和原始机器之间的唯一区别是修改过的设备树文件。您能否详细说明 MACHINE_OVERRIDES 变量?
    • 如果在 bb 配方为 included 或 required 时应用 bbappend,我还没有收到维护人员的答复,但我的直觉保持不变:不支持。因此,只有 at91bootstrap_${PV}.bb 将被采用,而不会应用其任何 bbappend。所以你的 bbappend 不会用于 at91bootstrap-sam-ba 配方(但它会用于 at91bootstrap_${PV}.bb!)。我想我忘了说includerequire 实际上只是意味着包含的at91bootstrap_${PV}.bb 的内容直接插入require 行的at91bootstrap-sam-ba_${PV}.bb .
    • 这意味着您实际上可以直接在 at91bootstrap-sam-ba_${PV}.bb 中修改 COMPATIBLE_MACHINE,因为即使它来自 at91bootstrap_${PV}.bb,它在解析/解析 at91bootstrap-sam-ba_${PV}.bb 中的变量。对于MACHINEOVERRIDESCOMPATIBLE_MACHINE 关系,请参阅yoctoproject.org/docs/latest/mega-manual/…yoctoproject.org/docs/latest/mega-manual/…
    猜你喜欢
    • 2022-01-14
    • 2016-03-28
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 2018-04-24
    • 2022-11-19
    相关资源
    最近更新 更多