Rockchip RK3588 - Yocto构建rk3588平台镜像
----------------------------------------------------------------------------------------------------------------------------
开发板 :ArmSoM-Sige7开发板
eMMC :64GB
LPDDR4 :8GB
显示屏 :15.6英寸HDMI接口显示屏
u-boot :2017.09
linux :6.1
----------------------------------------------------------------------------------------------------------------------------
如果您正在开发嵌入式或物联网设备,那么肯定会面对一个挑战:如何为这些设备定制Linux系统发行版?构建和维护操作系统不是简单的任务,它通常包含如下几个重要方面:
- 引导程序(
bootloader):引导程序是第一个软件,负责初始化硬件,加载内核到内存,然后启动内核; - 内核(
linux kernel):操作系统的核心。负责管理系统硬件资源:主要是内存和设备管理,以及通过它的应用程序编程接口向其他软件提供硬件抽象; - 设备驱动:他们是内核的一部分,通过系统调用向应用程序提供对硬件的访问;
- 文件系统:也是内核的一部分,在
linux系统中:一切皆文件,系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问; - 应用软件管理:应用软件和库组成了系统软件的大部分,一个完整的操作系统通常有数百到数千个软件包。
Linux和大量开源软件包都是构建Linux系统发行版的重要组成部分,然而搞清楚这些不同软件包之间的依赖和不兼容性是个很大的困难。这个时候Yocto Project很可能成为您产品或开发需求的有效解决方案,它是一个开源协作项目,具有如下特点:
Yocto Project适用于任何架构。无论是芯片还是ODM供应商都编写了支持性的BSP,或者如果您有自定义芯片,您可以按照YP的规格创建BSP。Yocto Project支持Intel,ARM,MIPS,AMD,PPC等;- 大多数
ODM,OSV和芯片供应商提供SDK,BSP和其他支持结构,以便与Yocto Project一起使用; - 它专为受限制的嵌入式和物联网设备需求而设计。
Yocto Project的设计使您只需根据需要添加所需内容或包,而无需删除和减少默认分发。Yocto Project提供了一个示例嵌入式发行版(Poky),以帮助您快速入门; Yocto Project提供全面的工具链功能。此工具链已经过Yocto社区在各种架构和平台上的测试;Yocto Project遵循严格的发布计划,在所有受支持的版本中包含安全补丁。
一、Yocto简介
1.1 Yocto
Yocto全称是Yocto Project(官方简称 YP) 是Linux基金会在2010年推出的一个开源的协作项目。提供模板、工具和方法以创建定制的Linux系统和配套工具,而无需关心硬件体系。主要由Poky和 其他一些工具组成。

从历史上看,Yocto Project是从OpenEmbedded项目发展而来的。他们本是两个不同的项目(左侧分离视图),然而,目前的OpenEmbedded与Yocto Project已经融合为一体了(右侧合并视图),因为目前已经很少见单独使用OpenEmbedded了。
1.2 Poky
Poky是默认的Yocto项目参考发行版,使用OpenEmbedded构建系统技术。它由一系列工具、配置文件和配方数据(称为元数据)组成。它与平台无关,使用BitBake工具、OpenEmbedded Core和默认元数据集执行交叉编译,如下图所示。
此外,它还提供了一种机制,用于构建和组合成千上万的分布式开源项目,从而形成一个完全可定制的、完整的、连贯的Linux软件栈。
1.2.1 Bitbake
BitBake是一个任务调度器和执行系统,可解析Python和Shell脚本代码。解析后的代码会生成并运行任务,这些任务是根据代码的依赖关系排序的一系列步骤。
BitBake会评估所有可用的元数据,管理动态变量扩展、依赖关系和代码生成。此外,它还会跟踪所有任务以确保其完成,从而最大限度地利用处理资源,缩短构建时间并提高可预测性。
1.2.2 OpenEmbedded Core
OpenEmbedded Core元数据集提供了Poky构建系统的引擎。它提供核心功能,并力求通用和尽可能精简。它支持七种不同的处理器架构(ARM、ARM64、x86、x86-64、PowerPC、PowerPC 64、MIPS、MIPS64、RISC-V32 和 RISC-V 64),仅支持QEMU模拟的平台。
1.2.3 元数据
元数据(Metadata)包括配方和配置文件。它由Python和Shell Script文本文件混合组成,提供了非常灵活的工具。
Poky利用它来扩展OpenEmbedded Core,并包含两个不同的层,即其他元数据子集,如下所示:
-
meta-poky:该层提供默认和支持的发布策略、可视化品牌和元数据跟踪信息(维护者、上游状态等)。该层将作为一个精心策划的模板,供发行版构建者用于为其自定义发行版提供种子; -
meta-yocto-bsp:提供板级支持包(BSP),作为Yocto项目开发和质量保证(QA)过程的参考硬件。
二、准备编译环境
对编译主机的要求,建议ubuntu 16.04版本以上的修通,并且建议磁盘空闲大小是90GB以上,内存空间8GB以上。
2.1 ubuntu系统
这里实验我直接在我的腾讯云服务器上进行,查看系统版本:
root@ubuntu:~# uname -a
Linux ubuntu 5.15.0-107-generic #117~20.04.1-Ubuntu SMP Tue Apr 30 10:35:57 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
root@ubuntu:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.2 LTS
Release: 20.04
Codename: focal
这里我使用的服务器ubuntu版本为20.04。
2.2 安装依赖
在执行Yocto构建时,以下是执行此操作所需的最基本软件工具。这些工具在所有主机上都是通用的,包括Ubuntu 22.04;
git:用于版本控制和获取Yocto项目源代码,版本为1.8.3.1或更高版本;tar:用于解压Yocto项目中的压缩文件,版本为1.28或更高版本;python 3:Yocto构建系统依赖Python 3,版本为3.6.0或更高版本;wget:用于从网络下载文件;make:Yocto构建系统使用Makefile进行构建,版本为4.0或更高版本;gcc:版本为7.5或更高版本。
确保在ubuntu 20.04主机上安装了这些工具,以便能够顺利进行Yocto构建。
root@ubuntu:~# sudo apt update
root@ubuntu:~# sudo apt install git git-lfs tar python3 python3-pip wget make gcc
2.3 ubuntu指定软件包
除了上面列出的最低要求之外,还需要一些主机软件包才能成功执行Yocto构建。为了安装这些软件包,请执行以下命令;
root@ubuntu:~# sudo apt install gawk diffstat unzip texinfo build-essential chrpath socat cpio python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev xterm python3-subunit mesa-common-dev zstd liblz4-tool file locales
三、Yocto构建qemux86-64镜像
本节简短的文档将引导您完成使用Yocto Project进行典型镜像构建的过程。你将使用Yocto Project构建一个名为poky的适用于仿真的镜像。
注意:Poky下载和编译的整个环节(除了运行QEMU虚拟机外)不需要root权限,请尽可能不要在root环境下去操作。
3.1 配置代理
由于Poky源码下载以及构建过程中需要下载大量依赖包,这些包在国内很难下载下来,因此全程使用vpn时非常重要的。
3.1.1 配置git代理
比如我使用的某某vpm,需要进行代理配置:
zhengyang@ubuntu:/work/sambashare/rk3588# git config --global http.https://github.com.proxy https://127.0.0.1:7890
zhengyang@ubuntu:/work/sambashare/rk3588# git config --global https.https://github.com.proxy https://127.0.0.1:7890
通过如上设置不会影响克隆国内的速度,当然也可以通过socks5代理:
zhengyang@ubuntu:/work/sambashare/rk3588# git config --global http.proxy socks5://127.0.0.1:7891
zhengyang@ubuntu:/work/sambashare/rk3588# git config --global https.proxy socks5://127.0.0.1:7891
如果需要取消代理,只需要:
zhengyang@ubuntu:/work/sambashare/rk3588# git config --unset http.proxy
zhengyang@ubuntu:/work/sambashare/rk3588# git config --unset https.proxy
注意:配置完成后,只能为http、https协议加速,无法为git://git.xxxxx加速。
3.1.2 设置环境变量
设置如下环境变量:
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky# vim ~/.bashrc
export http_proxy='https://127.0.0.1:7890/'
export https_proxy='https://127.0.0.1:7890/'
export ftp_proxy='https://127.0.0.1:7890/'
export ALL_PROXY='socks5://127.0.0.1:7891/'
export all_proxy='socks5://127.0.0.1:7891/'
export no_proxy='127.0.0.1'
3.1.3 配置wget代理
配置wget代理:
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky/build# vim ~/.wgetrc
https_proxy = https://127.0.0.1:7890
http_proxy = https://127.0.0.1:7890
ftp_proxy = https://127.0.0.1:7890
no_proxy = 127.0.0.1
use_proxy = on
退出当前会话重新登陆使其生效。
3.2 下载Poky项目
环境准备好之后开始下载源代码,假设在/opt目录中,执行如下命令。
zhengyang@ubuntu:/work/sambashare/rk3588$ sudo mkdir armsom
zhengyang@ubuntu:/work/sambashare/rk3588$ sudo chown zhengyang:zhengyang armsom
# zhengyang@ubuntu:/work/sambashare/rk3588/armsom# git clone git://git.yoctoproject.org/poky
# 为了使用vpn替换成如下命令
zhengyang@ubuntu:/work/sambashare/rk3588/armsom# git clone https://git.yoctoproject.org/poky
zhengyang@ubuntu:/work/sambashare/rk3588/armsom# cd poky
我们尽量选择一个稳定的长期支持的版本来做开发,比如kirkstone(yocto-4.0)版本,推荐使用,支持到2026年。
切换到对应的版本:
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky# git checkout -b kirkstone origin/kirkstone
分支 'kirkstone' 设置为跟踪来自 'origin' 的远程分支 'kirkstone'。
切换到一个新分支 'kirkstone'
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky# ll
drwxrwxr-x 6 zhengyang zhengyang 4096 6月 8 14:25 bitbake/
drwxrwxr-x 4 zhengyang zhengyang 4096 6月 8 14:24 contrib/
drwxrwxr-x 21 zhengyang zhengyang 4096 6月 8 14:25 documentation/
drwxrwxr-x 8 zhengyang zhengyang 4096 6月 8 14:25 .git/
-rw-rw-r-- 1 zhengyang zhengyang 702 6月 8 14:25 .gitignore
-rw-rw-r-- 1 zhengyang zhengyang 834 6月 8 14:24 LICENSE
-rw-rw-r-- 1 zhengyang zhengyang 15394 6月 8 14:24 LICENSE.GPL-2.0-only
-rw-rw-r-- 1 zhengyang zhengyang 1286 6月 8 14:24 LICENSE.MIT
-rw-rw-r-- 1 zhengyang zhengyang 2202 6月 8 14:25 MAINTAINERS.md
-rw-rw-r-- 1 zhengyang zhengyang 1222 6月 8 14:25 Makefile
-rw-rw-r-- 1 zhengyang zhengyang 244 6月 8 14:24 MEMORIAM
drwxrwxr-x 20 zhengyang zhengyang 4096 6月 8 14:25 meta/
drwxrwxr-x 5 zhengyang zhengyang 4096 6月 8 14:25 meta-poky/
drwxrwxr-x 9 zhengyang zhengyang 4096 6月 8 14:25 meta-selftest/
drwxrwxr-x 8 zhengyang zhengyang 4096 6月 8 14:25 meta-skeleton/
drwxrwxr-x 8 zhengyang zhengyang 4096 6月 8 14:25 meta-yocto-bsp/
-rwxrwxr-x 1 zhengyang zhengyang 1297 6月 8 14:25 oe-init-build-env*
lrwxrwxrwx 1 zhengyang zhengyang 33 6月 8 14:24 README.hardware.md -> meta-yocto-bsp/README.hardware.md
lrwxrwxrwx 1 zhengyang zhengyang 14 6月 8 14:24 README.md -> README.poky.md
-rw-rw-r-- 1 zhengyang zhengyang 791 6月 8 14:25 README.OE-Core.md
lrwxrwxrwx 1 zhengyang zhengyang 24 6月 8 14:24 README.poky.md -> meta-poky/README.poky.md
-rw-rw-r-- 1 zhengyang zhengyang 529 6月 8 14:24 README.qemu.md
drwxrwxr-x 10 zhengyang zhengyang 4096 6月 8 14:25 scripts/
-rw-rw-r-- 1 zhengyang zhengyang 1177 6月 8 14:25 SECURITY.md
-rw-rw-r-- 1 zhengyang zhengyang 65 6月 8 14:25 .templateconf
git checkout命令创建了一个名为kirkstone的本地分支。该分支中的文件与kirkstone发布分支中存储库的文件完全相同。
请注意,您可以定期在相同的目录中输入以下命令,以使您的本地文件与发布分支保持同步:
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky# git pull
3.3 创建构建环境
构建目录是存放所有Yocto构建的地方。这使我们能够清晰地划分构建,同时尽可能地重复使用资源。在构建目录中,包含着平台配置、镜像/平台需要的特定变量、要添加到镜像中的其他recipes等。
要创建一个构建目录,只需执行一个名为oe-init-build-env的脚本,它将创建构建环境(路径、快捷方式、变量等);
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky# source oe-init-build-env <name of your build directory>
You had no conf/local.conf file. This configuration file has therefore been
created for you from /work/sambashare/rk3588/armsom/poky/meta-poky/conf/local.conf.sample
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 from /work/sambashare/rk3588/armsom/poky/meta-poky/conf/bblayers.conf.sample
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 the 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'
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的构建目录。下次要使用相同的目录时,只需再次调用相同的命令。
此外,一旦执行了这个命令,就已经位于新创建的构建目录中。
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky/build# ll
drwxrwxr-x 2 zhengyang zhengyang 4096 6月 8 14:25 conf/
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky/build# ll conf
-rw-rw-r-- 1 zhengyang zhengyang 340 6月 8 14:25 bblayers.conf
-rw-rw-r-- 1 zhengyang zhengyang 11885 6月 8 14:25 local.conf
-rw-rw-r-- 1 zhengyang zhengyang 15 6月 8 14:25 templateconf.cfg
3.3.1 local.conf
在conf目录下会创建local.conf文件,这个配置文件功能强大,它是构建环境的主要配置文件。
我们可以为自定义跨工具链设置目标机器和工具链主机架构,优化选项以最大限度地缩短构建时间等等。
local.conf文件内的注释是极好的文档,也是可能的变量及其默认值的参考。我们可能需要更改默认值的最小变量集如下:
MACHINE ??= "qemux86-64"
通过MACHINE变量,我们可以确定要构建的目标机器。比如:
beaglebone-yocto:是32位ARM的参考平台;genericx86:这是对基于x86的32位机器的通用支持;genericx86-64:这是对基于x86的64位机器的通用支持;edgerouter:这是EdgeRouter Lite,是64位MIPS的参考平台;
Yocto构建默认选择的目标平台是qemux86-64,这适用于仿真。
除了这些机器外,OpenEmbedded Core在meta目录中还提供了对以下快速仿真 (Qemu) 机器的支持:
qemuarm:QEMU ARMv7仿真;qemuarmv5:QEMU ARMv5仿真;qemuarm64:QEMU ARMv8仿真;qemumips:QEMU MIPS仿真;qemumips64:QEMU MIPS64仿真;qemuppc:QEMU PowerPC仿真;qemuppc64:QEMU PowerPC 64仿真;qemux86-64:QEMU x86-64仿真;qemux86:QEMU x86仿真;qemuriscv32:QEMU RISC-V 32仿真;qemuriscv64:QEMU RISC-V 64仿真;
3.4 开始Yocto构建
第一次构建通常是最耗时的,因为它从recipe提及的各种上游源下载数百个tarballs。因此,将其分为两个部分是个好主意;
- 第一步只是获取所有的源代码、
tarballs等; - 第二步是使用下载的资源以及配置元数据和配方进行实际构建。
谈到recipe,已经有许多核心镜像recipe可供我们使用。这些核心recipe使我们能够创建一个可工作的Linux镜像,而无需对平台进行任何自定义。成功创建这样一个镜像证明了我们的构建设置有效,然后我们可以继续为目标平台进行更复杂的构建。
在执行source oe-init-build-env时屏幕上已经显示了这些核心镜像的一个小子集。一些流行的核心镜像包括:
core-image-minimal:一个允许设备仅进行启动的小型镜像;core-image-full-cmdline: 一个仅支持控制台的镜像,安装了更多功能丰富的Linux系统功能;core-image-sato: 这是一个支持Sato的镜像,为使用X11的移动设备提供移动环境。它提供终端、编辑器、文件管理器、媒体播放器等应用程序;core-image-weston:这个图像配置通常包括Weston显示服务器,它是用于嵌入式系统的Wayland协议的参考实现。core-image-weston提供了一个基本的Weston环境,适用于测试和验证嵌入式图形系统。
在本次实现我们使用 core-image-minimal 作为目标镜像,目标平台是qemux86-64。
3.4.1 配置oe-git代理
配置oe-git代理:
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky# sudo apt-get install socat
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky# wget http://git.yoctoproject.org/cgit/cgit.cgi/poky/plain/scripts/oe-git-proxy
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky# mkdir ~/bin
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky# cp oe-git-proxy ~/bin/
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky# chmod +x ~/bin/oe-git-proxy
更新bashrc:
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky# vim ~/.bashrc
export GIT_PROXY_COMMAND="oe-git-proxy"
export NO_PROXY=$no_proxy
退出当前会话重新登陆使其生效。
3.4.2 获取资源
首先获取资源(注意每次运行如下命令都需要先构建环境):
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky/build# bitbake core-image-minimal --runall=fetch
Loading cache: 100% | | ETA: --:--:--
Loaded 0 entries from dependency cache.
Parsing recipes: 100% |#################################################################################################| Time: 0:01:30
Parsing of 883 .bb files complete (0 cached, 883 parsed). 1644 targets, 45 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Build Configuration:
BB_VERSION = "2.0.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "ubuntu-22.04"
TARGET_SYS = "x86_64-poky-linux"
MACHINE = "qemux86-64"
DISTRO = "poky"
DISTRO_VERSION = "4.0.14"
TUNE_FEATURES = "m64 core2"
TARGET_FPU = ""
meta
meta-poky
meta-yocto-bsp = "kirkstone:3e73216a32a2b01916eb8c555a41579bd69a47aa"
......
下载时间较长,耐心等待。
3.4.3 编译
成功获取资源后我们进行编译, 编译时间取决于我们的系统资源;
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky/build# bitbake core-image-minimal
3.5 运行镜像
一旦构建完成,输出的镜像可以在tmp/deploy/images/qemux86-64文件夹中找到;
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky/build$ ll tmp/deploy/images/qemux86-64/
lrwxrwxrwx 2 zhengyang zhengyang 77 6月 8 22:31 bzImage -> bzImage--5.15.157+git0+7cdb56640a_f0d16a142e-r0-qemux86-64-202406081 31259.bin
-rw-r--r-- 2 zhengyang zhengyang 10021664 6月 8 22:31 bzImage--5.15.157+git0+7cdb56640a_f0d16a142e-r0-qemux86-64-20240608131259.bin
lrwxrwxrwx 2 zhengyang zhengyang 77 6月 8 22:31 bzImage-qemux86-64.bin -> bzImage--5.15.157+git0+7cdb56640a_f0d16a142e-r0-qemux 86-64-20240608131259.bin
-rw-r--r-- 2 zhengyang zhengyang 1515 6月 8 22:41 core-image-minimal-qemux86-64-20240608131259.qemuboot.conf
-rw-r--r-- 2 zhengyang zhengyang 28114944 6月 8 22:42 core-image-minimal-qemux86-64-20240608131259.rootfs.ext4
-rw-r--r-- 2 zhengyang zhengyang 1076 6月 8 22:41 core-image-minimal-qemux86-64-20240608131259.rootfs.manifest
-rw-r--r-- 2 zhengyang zhengyang 13683950 6月 8 22:42 core-image-minimal-qemux86-64-20240608131259.rootfs.tar.bz2
-rw-r--r-- 2 zhengyang zhengyang 198977 6月 8 22:41 core-image-minimal-qemux86-64-20240608131259.testdata.json
lrwxrwxrwx 2 zhengyang zhengyang 56 6月 8 22:42 core-image-minimal-qemux86-64.ext4 -> core-image-minimal-qemux86-64-20240608131 259.rootfs.ext4
lrwxrwxrwx 2 zhengyang zhengyang 60 6月 8 22:41 core-image-minimal-qemux86-64.manifest -> core-image-minimal-qemux86-64-2024060 8131259.rootfs.manifest
lrwxrwxrwx 2 zhengyang zhengyang 58 6月 8 22:41 core-image-minimal-qemux86-64.qemuboot.conf -> core-image-minimal-qemux86-64-20 240608131259.qemuboot.conf
lrwxrwxrwx 2 zhengyang zhengyang 59 6月 8 22:42 core-image-minimal-qemux86-64.tar.bz2 -> core-image-minimal-qemux86-64-20240608 131259.rootfs.tar.bz2
lrwxrwxrwx 2 zhengyang zhengyang 58 6月 8 22:41 core-image-minimal-qemux86-64.testdata.json -> core-image-minimal-qemux86-64-20 240608131259.testdata.json
-rw-r--r-- 2 zhengyang zhengyang 8232907 6月 8 22:31 modules--5.15.157+git0+7cdb56640a_f0d16a142e-r0-qemux86-64-20240608131259.tgz
lrwxrwxrwx 2 zhengyang zhengyang 77 6月 8 22:31 modules-qemux86-64.tgz -> modules--5.15.157+git0+7cdb56640a_f0d16a142e-r0-qemux 86-64-20240608131259.tgz
我们可以使用硬件模拟来加快开发进程,因为它可以在不涉及任何实际硬件的情况下进行测试运行。幸运的是,大多数项目只有很小一部分依赖于硬件。
Qemu是一款免费的开源软件包,可执行硬件虚拟化。基于Qemu的机器允许在没有实际硬件的情况下进行测试和开发。目前支持 ARMv5、ARMv7、ARMv8、MIPS、MIPS64、PowerPC、PowerPC 64、RISC-V 32、RISC-V 64、x86 和 x86-64 仿真。我们将在 "通过仿真加速产品开发 - QEMU "一文中详细介绍QEMU的使用。
OpenEmbedded Core提供了runqemu脚本工具,它是一个封装工具,能让Qemu的使用更简单。运行脚本工具的方法如下:
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky/build# runqemu qemux86-64
退出Qemu:通过关闭终端即可。
四、为特定硬件定制化构建
到目前为止,我们只是快速构建一个仅适用于仿真的镜像。本节介绍如何通过在Yocto Project开发环境中添加硬件层来自定义特定硬件的构建。
通常,图层(layer)是包含相关指令集和配置的存储库,这些指令和配置告诉Yocto Project要执行的操作。将相关元数据隔离到功能特定的层中有助于模块化开发,并且更容易重用层元数据。
注意 按照惯例,图层名称以字符串meta-开头。
4.1 添加硬件层
接下来,请按照以下步骤添加硬件层。
4.1.1 查找图层
Yocto项目源存储库有许多硬件层,此示例添加了 meta-altera 硬件层;
4.1.2 克隆图层
使用git在您的计算机上制作图层的本地副本;
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky# git clone https://github.com/kraj/meta-altera.git
4.1.3 配置local.conf
local.conf文件中的MACHINE变量指定构建的硬件平台,将MACHINE变量设置为cyclone5,使用的配置是:https://github.com/kraj/meta-altera/blob/master/conf/machine/cyclone5.conf;
4.1.4 将图层添加到图层配置文件
在使用图层之前,必须将其添加到bblayers.conf文件中,该文件位于构建目录的conf目录中。
使用bitbake-layers add-layer命令将图层添加到配置文件:
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky# cd build
zhengyang@ubuntu:/work/sambashare/rk3588/armsom/poky/build# bitbake-layers add-layer ../meta-altera
完成这些步骤后,meta-altera层已添加 到Yocto Project开发环境中,可以查看bblayers.conf文件查看:
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \
/home/h310588/yocto_project/poky/meta \
/home/h310588/yocto_project/poky/meta-poky \
/home/h310588/yocto_project/poky/meta-yocto-bsp \
/home/h310588/yocto_project/poky/meta-altera \
"
4.2 创建自己的通用图层
您可以使用该bitbake-layers create-layer命令创建自己的常规图层 。该工具通过设置一个包含layer.conf配置文件、一个包含示例.bb配方的recipes-example子目录、一个许可文件和一个README的子目录来自动创建层。
以下命令运行该工具,在poky目录中创建一个名为meta-mylayer的层:
ubuntu@VM-4-9-ubuntu:/opt/poky$ bitbake-layers create-layer meta-mylayer
该命令自动创建了如下图层目录结构:
ubuntu@VM-4-9-ubuntu:/opt/poky$ tree meta-mylayer
meta-mylayer
├── conf
│ └── layer.conf
├── COPYING.MIT
├── README
└── recipes-example
└── example
└── example_0.1.bb
3 directories, 4 files
有关层以及如何创建它们的更多信息,请参阅Yocto项目开发任务手册中的使用bitbake-layers脚本创建通用层部分。
参考文章
[4] yocto系列之针对rk3588平台构建一个基础镜像
[5] 使用Yocto进行嵌入式Linux开发1 Yocto简介
[6] 基于Yocto构建嵌入式Linux系统U-boot、kernel内核、rootfs文件系统
[7] Yocto系列讲解[入门篇] 1 - 快速入门熟悉Yocto的构建
[8] Yocto系列
[9] Welcome to the Yocto Project Documentation
[10] Yocto Project Overview and Concepts Manual
[11] Yocto Project Wiki

浙公网安备 33010602011771号