我有一个关于在Yocto中添加新机器的问题。
我试图在Yocto中添加一个新的层和一个新的机器。这台机器是基于Atmels SAMA5D27-SOM1-EK-SD评估板。我想为这块板子启用另一个UART。
我克隆了这块板子的内核源码(linux-at91),并在at91sama5d27-som1-ek-sd.dts文件的基础上添加了另一个DTS文件。我做了一些修改,以启用UART0。然后我把这个新的DTS文件添加到linux-at91archarmbootdts的Makefile中。我做了一个补丁来保存这些更改。
我使用的是meta-atmel层,并按照下面的说明进行操作。此处 来构建这个板子的图像。
我已经定义了另一个层,它将作为新的Yocto层来定义我的自定义机器,我已经在recipes-kernel中添加了一些.bbappend文件来添加补丁(它为linux at91内核源添加了新的dts文件)并添加了我们的自定义机器。我在recipes-kernel中添加了一些.bbappend文件来添加一个补丁(它为linux at91内核源添加了一个新的dts文件),并将我们的自定义机器添加为兼容机器。我的理解是,我们可以继续使用meta-atmel层中的定义,但在meta-axon层中添加.bbappend文件在同一路径中,这样就可以应用我们想要的变化。
我对recipes-bsp目录也是这样做的。在元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层使用它,而完全不改变它。(已编辑)
其实它确实提到了兼容机器。
在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确实被设置了,甚至会告诉您它被设置的位置。
P.S.: 在某些情况下,您的自定义机器要求使用它所基于的原始机器(例如. sama5d27-som1-ek-sd
),并将原始机器的名称作为以下内容的一部分。MACHINE_OVERRIDES
这样您就不必为每个配方添加一个带有 COMPATIBLE_MACHINE
. 要注意顺序 MACHINE_OVERRIDES
从右到左,从最右端开始评估。OVERRIDES
是最优先的。(使用 bitbake -e <recipe>
以确保其设置正确)。)
[2] https:/github.comlinux4sammeta-atmelblobmasterrecipes-bspat91bootstrapat91bootstrap_3.9.2.bb#L5。