0

我有一个关于在 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 层,并按照此处概述的说明为该板构建图像。

我已经定义了另一个层,它将充当定义我的自定义机器的新 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 层使用它而不需要更改它。(已编辑)

4

1 回答 1

0

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

在 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这样您就不必添加bbappend 为每个配方添加COMPATIBLE_MACHINE. 注意 中的顺序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

于 2020-06-14T11:42:27.137 回答