此文为机器辅助翻译,仅供个人学习使用,如有翻译不当之处欢迎指正
1 Yocto 项目快速构建
1.1 欢迎!
本简短文档将引导您完成使用 Yocto Project 进行典型镜像构建的流程,并介绍如何为特定硬件配置构建环境。您将使用 Yocto Project 构建一个名为 Poky 的参考嵌入式操作系统。
!NOTE
本文中的示例假定您使用的是运行最新 Ubuntu Linux 发行版的原生 Linux 系统。如果您希望用于通过 Yocto Project 构建镜像的机器(构建主机)并非原生 Linux 系统,仍可通过使用跨平台工具(CROPS)并设置 Poky 容器来执行这些步骤。更多信息请参阅《Yocto Project 开发任务手册》中的 "设置使用跨平台工具(CROPS)" 章节。
您可以使用适用于 Linux 的 Windows 子系统版本 2(WSL 2)在 Windows 10 或更高版本、Windows Server 2019 或更高版本上设置构建主机。更多信息请参阅《Yocto Project 开发任务手册》中的 "设置使用适用于 Linux 的 Windows 子系统(WSL 2)" 章节。
如果您需要有关 Yocto 项目的更多概念或背景信息,请参阅Yocto 项目概述和概念手册。
1.2 兼容的Linux发行版
确保您的构建主机满足以下要求:
- 至少需要 90 GB 的可用磁盘空间,但更多的空间将有助于运行多个构建并通过重用构建工件来提高性能。
- 至少 8 GB 的 RAM,尽管强烈建议使用具有尽可能多的 RAM 和尽可能多的 CPU 内核的现代构建主机来最大限度地提高构建性能。
- 运行受支持的 Linux 发行版(例如 Fedora、openSUSE、CentOS、Debian 或 Ubuntu 的最新版本)。有关支持 Yocto 项目的 Linux 发行版列表,请参阅 Yocto 项目参考手册中的"支持的 Linux 发行版" 部分。有关准备构建主机的详细信息,请参阅 Yocto 项目开发任务手册中的"准备构建主机"部分。
-
- Git 1.8.3.1 或更高版本
- tar 1.28 或更高版本
- Python 3.8.0 或更高版本。
- gcc 8.0 或更高版本。
- GNU make 4.0 或更高版本
如果您的构建主机不满足以上三个版本要求中的任何一个,您可以采取措施准备系统,以便继续使用 Yocto 项目。有关详细信息,请参阅 Yocto 项目参考手册中"所需的 Git、tar、Python、make 和 gcc 版本" 部分。
1.3 构建主机软件包
您必须在构建主机上安装必要的主机软件包。以下命令基于 Ubuntu 发行版安装主机软件包:
shell
$ sudo apt install build-essential chrpath cpio debianutils diffstat file gawk gcc git iputils-ping libacl1 liblz4-tool locales python3 python3-git python3-jinja2 python3-pexpect python3-pip python3-subunit socat texinfo unzip wget xz-utils zstd
!NOTE
有关所有受支持的 Linux 发行版上的主机包要求,请参阅 Yocto 项目参考手册中的构建主机所需包部分。
1.4 使用 Git 克隆 Poky
完成机器的设置说明后,您需要在构建主机上获取 Poky 仓库的副本。使用以下命令克隆 Poky 仓库。
$ git clone git://git.yoctoproject.org/poky
Cloning into 'poky'...
remote: Counting
objects: 432160, done. remote: Compressing objects: 100%
(102056/102056), done. remote: Total 432160 (delta 323116), reused
432037 (delta 323000) Receiving objects: 100% (432160/432160), 153.81 MiB | 8.54 MiB/s, done.
Resolving deltas: 100% (323116/323116), done.
Checking connectivity... done.
转到发布 wiki 页面,然后选择一个发布代号(例如styhead
),对应于最新的稳定版本或长期支持版本。
然后移动到poky
目录并查看现有分支:
$ cd poky
$ git branch -a
.
.
.
remotes/origin/HEAD -> origin/master
remotes/origin/dunfell
remotes/origin/dunfell-next
.
.
.
remotes/origin/gatesgarth
remotes/origin/gatesgarth-next
.
.
.
remotes/origin/master
remotes/origin/master-next
.
.
.
对于此示例,请根据版本styhead
检查分支Styhead
(Styhead为youcto5.1):
$ git checkout -t origin/styhead -b my-styhead
Branch 'my-styhead' set up to track remote branch 'styhead' from 'origin'.
Switched to a new branch 'my-styhead'
前面的 Git checkout 命令创建了一个名为 的本地分支 my-styhead
。该分支中可用的文件与styhead
发布分支中仓库的文件完全匹配。
注意,您可以定期在同一目录中键入以下命令,以使本地文件与发布分支保持同步:
$ git pull
有关访问 Yocto 项目相关存储库的更多选项和信息,请参阅 Yocto 项目开发任务手册中的定位 Yocto 项目源文件部分。
1.5 建立你的镜像
使用以下步骤构建您的镜像。构建过程会从源代码创建完整的 Linux 发行版,包括工具链。
!NOTE
如果您在防火墙后工作,并且您的构建主机未设置代理,则在获取源代码时可能会遇到构建过程的问题(例如,获取器故障或 Git 故障)。
如果您不清楚自己的代理设置,请咨询您当地的网络基础设施资源并获取相关信息。检查您的网络浏览器设置也是一个不错的起点。最后,您可以在Yocto 项目 Wiki 的"使用网络代理"页面上找到更多信息。
1.初始化构建环境: 从poky
目录中,运行oe-init-build-env 环境设置脚本来在构建主机上定义 Yocto 项目的构建环境。
$ cd poky
$ source oe-init-build-env
You had no conf/local.conf file. This configuration file has therefore been
created for you with some default values. You may wish to edit it to, for
example, select a different MACHINE (target hardware). See conf/local.conf
for more information as common configuration options are commented.
You had no conf/bblayers.conf file. This configuration file has therefore
been created for you with some default values. To add additional metadata
layers into your configuration please add entries to conf/bblayers.conf.
The Yocto Project has extensive documentation about OE including a reference
manual which can be found at:
https://docs.yoctoproject.org
For more information about OpenEmbedded see their website:
https://www.openembedded.org/
### Shell environment set up for builds. ###
You can now run 'bitbake <target>'
Common targets are:
core-image-minimal
core-image-full-cmdline
core-image-sato
core-image-weston
meta-toolchain
meta-ide-support
You can also run generated QEMU images with a command like 'runqemu qemux86-64'
Other commonly useful commands are:
- 'devtool' and 'recipetool' handle common recipe tasks
- 'bitbake-layers' handles common layer tasks
- 'oe-pkgdata-util' handles common target package tasks
除此之外,该脚本还会创建构建目录, build
在本例中,它位于源目录中。脚本运行后,您的当前工作目录将设置为 构建目录。稍后,当构建完成时, 构建目录将包含构建期间创建的所有文件。
2.检查本地配置文件 :在设置构建环境时,构建目录的 conf
子目录中会生成一个名为 local.conf
的本地配置文件。在本示例中,默认配置为针对 qemux86
目标进行构建,该目标适用于仿真环境。所使用的软件包管理器设置为 RPM 软件包管理器。
!tip
通过使用共享状态缓存镜像并启用哈希等效性,您可以显著加快构建速度并防范获取程序故障。这样一来,您可以直接使用预构建工件,而无需重新构建。这仅在您的网络和所使用的服务器能够以快于本地构建的速度下载这些工件时才有意义。
要使用此类镜像,请在构建目录的
conf/local.conf
文件中取消注释以下行:
> BB_HASHSERVE_UPSTREAM = "wss://hashserv.yoctoproject.org/ws" > SSTATE_MIRRORS ?= "file://.* http://cdn.jsdelivr.net/yocto/sstate/all/PATH;downloadfilename=PATH" > BB_HASHSERVE = "auto" > BB_SIGNATURE_HANDLER = "OEEquivHash"
哈希等效性服务器需要 Python 的
websockets
模块版本 9.1 或更高。Debian GNU/Linux 12(Bookworm)及更高版本、Fedora、CentOS Stream 9 及更高版本,以及 Ubuntu 22.04(LTS)及更高版本均包含足够新的软件包。其他受支持的发行版需要从软件包源以外的渠道(如通过pip
)获取该模块。
3.开始构建: 继续使用以下命令为目标构建操作系统映像,在本例中为core-image-sato
:
$ bitbake core-image-sato
有关使用该bitbake
命令的信息,请参阅 Yocto 项目概述和概念手册中的 BitBake部分,或参阅 BitBake 用户手册中的BitBake 命令。
4.使用 QEMU 模拟您的图像: 一旦构建了此特定图像,您就可以启动 QEMU,它是 Yocto 项目附带的快速模拟器:
$ runqemu qemux86-64
如果您想了解有关运行 QEMU 的更多信息,请参阅 Yocto 项目开发任务手册中的使用快速模拟器 (QEMU)章节。
5.退出 QEMU: 可通过点击关机图标,或在启动 QEMU 的命令行窗口中输入 Ctrl-C
来退出 QEMU。
1.6 针对特定硬件定制您的构建
到目前为止,您所做的只是快速构建了一个仅适用于模拟的映像。本节将向您展示如何通过在 Yocto 项目开发环境中添加硬件层来针对特定硬件定制您的构建。
一般来说,层是包含相关指令和配置集的存储库,这些指令和配置集指示 Yocto 项目执行哪些操作。将相关元数据隔离到功能特定的层中,有助于模块化开发,并使层元数据的复用更加容易。
!NOTE
按照惯例,层名称以字符串"
meta-
"开头。
按照以下步骤添加硬件层:
1.查找层: 有多种硬件层可用。Yocto 项目 源代码库包含许多硬件层。本示例添加了 meta-altera硬件层。
2.克隆层: 使用 Git 在你的机器上创建该层的本地副本。你可以将副本放在之前创建的 Poky 仓库副本的顶层:
$ cd poky
$ git clone https://github.com/kraj/meta-altera.git
Cloning into 'meta-altera'...
remote: Counting objects: 25170, done.
remote: Compressing objects: 100% (350/350), done.
remote: Total 25170 (delta 645), reused 719 (delta 538), pack-reused 24219
Receiving objects: 100% (25170/25170), 41.02 MiB | 1.64 MiB/s, done.
Resolving deltas: 100% (13385/13385), done.
Checking connectivity... done.
硬件层现在可以在构建主机上的 Poky 参考存储库内的其他层旁边使用,meta-altera
并且包含支持英特尔旗下 Altera 硬件所需的所有元数据。
!NOTE
建议每个 Yocto 项目版本都为层创建一个分支。请务必检查支持您正在使用的 Yocto 项目版本的层分支。
3.更改配置以针对特定机器进行构建: 文件中的 MACHINE变量 local.conf
指定用于构建的机器。在本例中,将MACHINE变量设置为cyclone5
。以下配置可供使用: https://github.com/kraj/meta-altera/blob/master/conf/machine/cyclone5.conf。
!NOTE
有关配置构建的更多信息,请参阅前面的"检查本地配置文件"步骤。
3.将您的层添加到层配置文件: 在构建期间使用层之前,您必须将其添加到您的bblayers.conf
文件中,该文件位于构建目录 conf
目录中。
使用bitbake-layers add-layer
命令将层添加到配置文件中:
$ cd poky/build
$ bitbake-layers add-layer ../meta-altera
NOTE: Starting bitbake server...
Parsing recipes: 100% |##################################################################| Time: 0:00:32
Parsing of 918 .bb files complete (0 cached, 918 parsed). 1401 targets,
123 skipped, 0 masked, 0 errors.
您可以在使用 bitbake-layers 脚本添加图层部分中找到有关添加图层的更多信息 。
完成这些步骤后,该层已添加meta-altera
到您的 Yocto 项目开发环境中,并将其配置为为机器构建 cyclone5
。
!NOTE
上述步骤仅供演示之用。如果您尝试为该
cyclone5
机器构建镜像,则应阅读 Altera 的相关文档README
。
1.7 创建您自己的通用层
也许你有一个应用程序或特定的一组行为需要进行隔离处理。你可以使用bitbake-layers create-layer
命令创建自己的通用层。该工具会自动创建层,它会设置一个包含layer.conf
配置文件的子目录、一个recipes-example
子目录(其中包含一个example.bb
配方文件)、一个许可文件以及一个README
文件。
以下命令运行该工具来创建 目录meta-mylayer
中命名的层poky
:
$ cd poky
$ bitbake-layers create-layer meta-mylayer
NOTE: Starting bitbake server...
Add your new layer with 'bitbake-layers add-layer meta-mylayer'
有关图层以及如何创建它们的更多信息,请参阅 Yocto 项目开发任务手册中的使用 bitbake-layers 脚本创建通用图层部分。
1.8 下一步去哪里
现在您已经体验过 Yocto 项目,您可能会问自己"接下来该做什么?"。Yocto 项目有很多信息来源,包括网站、维基页面和用户手册:
-
网站: Yocto 项目网站提供背景信息、最新版本、突发新闻、完整的开发文档以及可供您利用的丰富的 Yocto 项目开发社区的访问权限。
-
视频研讨会: Yocto 项目和 BitBake 简介,第 1 部分和Yocto 项目和 BitBake 简介,第 2 部分视频提供了一个视频研讨会,向您介绍使用 Yocto 项目开发自定义嵌入式 Linux 发行版的最重要方面。
-
Yocto 项目概述和概念手册: Yocto 项目概述和概念手册是了解 Yocto 项目的理想入门指南。本手册将向您介绍 Yocto 项目及其开发环境。此外,本手册还提供了 Yocto 项目各个方面的概念性信息。
-
Yocto 项目 Wiki: Yocto项目 Wiki 提供了有关在推进 Yocto 项目时下一步行动、发布信息、项目规划和 QA 信息的更多信息。
-
**Yocto 项目邮件列表:**相关邮件列表提供了一个讨论、提交补丁和发布公告的平台。这里有多个按主题分组的邮件列表。请参阅 Yocto 项目参考手册中的"邮件列表" 部分,查看 Yocto 项目邮件列表的完整列表。
-
链接和其他文档的综合列表: Yocto 项目参考手册中的链接和相关文档部分提供了所有相关链接和其他用户文档的综合列表 。