回顾
在关于Yocto的先前的文章中,我们讨论了各种主题,比如Yocto是什么,如何下载它,构建基本镜像等等。这里是前面文章的相关链接:
Yocto: 第1部分 - yocto系列之yocto是个什么东东
https://mp.csdn.net/mp_blog/creation/editor/136742286
Yocto: 第2部分 - yocto系列之配置ubuntu主机
https://mp.csdn.net/mp_blog/creation/editor/136745533
Yocto: 第3部分 - yocto系列之构建与运行第一个镜像
https://mp.csdn.net/mp_blog/creation/editor/136760112
Yocto: 第4部分 - yocto系列之针对rk3588平台构建一个基本镜像
https://mp.csdn.net/mp_blog/creation/editor/136760343
在这篇文章中,我们讲述一个相当基础但非常重要的主题,通常是我们自定义镜像的起点。我们讨论如何创建和添加一个新层到目标镜像中。
Layers
在第三部分介绍中,我们谈到了Yocto构建系统的分层性质,以及如何实现软件的最大重用,同时允许我们轻松地迁移到另一个硬件平台。
层的概念是,我们可以轻松地将“秘密recipes”(即“目标源代码”)捆绑到自己的层中,并覆盖相应层中相同recipes的一些配置。
例如, 可以修改meta-oe层中已经存在的packages,向其添加新的软件源码或是定制kernel配置以生成一个定制镜像。
创建新的layer
创建新层最简单且推荐的方法是使用 `bitbake-layers` 脚本。一旦使用`poky/` 目录中的 `oe-build-init-env` 脚本进行了环境设置,bitbake-layers脚本就可以使用了。
`bitbake-layers` 脚本非常灵活,不仅可以创建层,还可以执行许多其他操作。为了了解它能做什么,我们首先初始化我们的构建环境,然后查看可用的帮助文档。
source poky/oe-init-build-env rk3588-build
bitbake-layers --help
如我们所看到的,这个脚本不仅可以帮助我们创建一个层、还可以将一个层添加到我们的配置中、从构建配置中移除一个层、显示当前添加的层以及一些其他有用的操作,比如显示构建中的recipes或特定层的recipes等等。
让我们检查一下当前配置中有哪些层。
bitbake-layers show-layers
这会打印出类似以下的输出。
注意:你的输出可能会根据构建配置不同而有所不同。
新的layer所在位置
我当前的yocto所在目录层级如下:
通常最将自己的层放置在 yocto/ 文件夹内,以便与添加的其他非poky层处于同一级。此外,习惯上建议层的名称以 meta- 开头。
在yocto目录下创建一个名为meta-test的层级:
source到rk3588构建目录下, 应用bitbake-layers脚本构建新的layer
加入新的meta-test layer后的新的目录结构如下:
将层添加到构建配置中
前面我们成功创建了新的层,现在我们将其添加到我们的配置中。将来,我们将在这个层添加我们自己的recipes,并创建我们的定制镜像。
再次使用 bitbake-layers 脚本将这个层添加到我们的构建配置中。
bitbake-layers add-layer ../meta-test
为了确认这一添加是否成功,可以运行 bitbake-layers 脚本,并带上 show-layers 参数,check结果如下:
在新的layer中构建recipes
当 bitbake-layers 为我们创建了这个层时,它还为我们创建了一个名为 example_0.1.bb 的示例recipe,该recipe位于 meta-test/recipes-example/example/ 目录下。
构建示例镜像:
bitbake example_0.1
如果之前已经进行过镜像构建,这个过程应该相对较快。
这是来自 example_0.1.bb 中的 do_display_banner() 函数: