使用Yocto构建固件的最佳实践

时间:2018-06-28 18:59:39

标签: yocto bitbake

我有一个工作正常的Yocto构建系统,该系统基于rocko分支,该分支正在为基于ARM的目标板生成映像。该板上的芯片之一是一个小型的,基于ARM的微控制器,与主CPU分离。它需要加载我必须构建的固件映像。

制作该微控制器固件的配方很容易。它需要一个ARM交叉编译器,然后需要一些特殊的编译器选项来控制代码生成(用于cortex-m4 + thumb等)。问题是,如果我设置一个普通的菜谱,它将假设我正在为目标ARM体系结构构建某种东西,这是另一种类型的ARM,需要不同的代码生成选项。我当然可以使固件Makefile覆盖为目标系统提供的交叉编译环境,并使Makefile仅生成二进制固件映像。

但这将产生一个标称用于目标ARM体系结构的软件包,但其中包含一个二进制blob,该二进制blob旨在被闪存到目标板上的芯片上。

所以我的问题是,我应该如何为将要在与yocto最终使用的机器完全不同的架构上执行的固件制定配方?

似乎我需要创建一个专门为微控制器构建的配方,因此在某种程度上与正常目标配方不同。

2 个答案:

答案 0 :(得分:4)

Multiconfig可能会帮助您。用例之一是您要为由FPGA和ARM内核组成的电路板构建映像,这在某种程度上类似于您的用例。

引用release notes of morty (2.2),它在那介绍:

  

对多配置构建的基本支持。例如,这样可以一次构建多个机器,如果您的板上有两个单独的SoC,每个SoC都有自己的OS,但是您希望将两者定位在同一构建中,则这可能会很有用。 >

我还没有尝试过,但是Rocko的文档在这里:https://www.yoctoproject.org/docs/2.4/mega-manual/mega-manual.html#platdev-building-targets-with-multiple-configurations

您基本上定义了两个机器配置文件,在BBMULTICONFIG变量中定义它们,并在需要时以目标对象的前缀multiconfig:<configuration>:运行bitbake。

答案 1 :(得分:2)

您需要创建一个bbclass,它将为您更改必要的变量,并将其继承到您的配方中。让我们以nativesdk.bbclass为例。您的newarch.bbclass文件将类似于:

CLASSOVERRIDE = "class-newarch"
PACKAGE_ARCH = "newarch"
PACKAGE_ARCHS += "newarch"
TARGET_ARCH = "newarch"
TARGET_CC_ARCH = "newarch"
TARGET_LD_ARCH = "newarch"
TARGET_AS_ARCH = "newarch"
TARGET_CPPFLAGS = "..."
TARGET_CFLAGS = "..."
TARGET_CXXFLAGS = "..."
TARGET_LDFLAGS = "..."
CPPFLAGS = "..."
CFLAGS = "..."
CXXFLAGS = "..."
LDFLAGS = "..."