程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)

Rockchip RK3588 - Yocto构建rk3588平台镜像

----------------------------------------------------------------------------------------------------------------------------

开发板 :ArmSoM-Sige7开发板
eMMC64GB
LPDDR48GB
显示屏 :15.6英寸HDMI接口显示屏
u-boot2017.09
linux6.1
----------------------------------------------------------------------------------------------------------------------------

如果您正在开发嵌入式或物联网设备,那么肯定会面对一个挑战:如何为这些设备定制Linux系统发行版?构建和维护操作系统不是简单的任务,它通常包含如下几个重要方面:

  • 引导程序(bootloader):引导程序是第一个软件,负责初始化硬件,加载内核到内存,然后启动内核;
  • 内核(linux kernel):操作系统的核心。负责管理系统硬件资源:主要是内存和设备管理,以及通过它的应用程序编程接口向其他软件提供硬件抽象;
  • 设备驱动:他们是内核的一部分,通过系统调用向应用程序提供对硬件的访问;
  • 文件系统:也是内核的一部分,在linux系统中:一切皆文件,系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问;
  • 应用软件管理:应用软件和库组成了系统软件的大部分,一个完整的操作系统通常有数百到数千个软件包。

Linux和大量开源软件包都是构建Linux系统发行版的重要组成部分,然而搞清楚这些不同软件包之间的依赖和不兼容性是个很大的困难。这个时候Yocto Project很可能成为您产品或开发需求的有效解决方案,它是一个开源协作项目,具有如下特点:

  • Yocto Project适用于任何架构。无论是芯片还是ODM供应商都编写了支持性的BSP,或者如果您有自定义芯片,您可以按照YP的规格创建BSPYocto Project支持Intel,ARM,MIPS,AMD,PPC等;
  • 大多数ODMOSV和芯片供应商提供SDKBSP和其他支持结构,以便与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

从历史上看,Yocto Project是从OpenEmbedded项目发展而来的。他们本是两个不同的项目(左侧分离视图),然而,目前的OpenEmbeddedYocto Project已经融合为一体了(右侧合并视图),因为目前已经很少见单独使用OpenEmbedded了。

1.2 Poky

Poky是默认的Yocto项目参考发行版,使用OpenEmbedded构建系统技术。它由一系列工具、配置文件和配方数据(称为元数据)组成。它与平台无关,使用BitBake工具、OpenEmbedded Core和默认元数据集执行交叉编译,如下图所示。

img

此外,它还提供了一种机制,用于构建和组合成千上万的分布式开源项目,从而形成一个完全可定制的、完整的、连贯的Linux软件栈。

1.2.1 Bitbake

BitBake是一个任务调度器和执行系统,可解析PythonShell脚本代码。解析后的代码会生成并运行任务,这些任务是根据代码的依赖关系排序的一系列步骤。

BitBake会评估所有可用的元数据,管理动态变量扩展、依赖关系和代码生成。此外,它还会跟踪所有任务以确保其完成,从而最大限度地利用处理资源,缩短构建时间并提高可预测性。

1.2.2 OpenEmbedded Core

OpenEmbedded Core元数据集提供了Poky构建系统的引擎。它提供核心功能,并力求通用和尽可能精简。它支持七种不同的处理器架构(ARMARM64x86x86-64PowerPCPowerPC 64MIPSMIPS64RISC-V32RISC-V 64),仅支持QEMU模拟的平台。

1.2.3 元数据

元数据(Metadata)包括配方和配置文件。它由PythonShell 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 3Yocto构建系统依赖Python 3,版本为3.6.0或更高版本;
  • wget:用于从网络下载文件;
  • makeYocto构建系统使用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

注意:配置完成后,只能为httphttps协议加速,无法为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

我们尽量选择一个稳定的长期支持的版本来做开发,比如kirkstoneyocto-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:这是对基于x8632位机器的通用支持;
  • genericx86-64:这是对基于x8664位机器的通用支持;
  • edgerouter:这是EdgeRouter Lite,是64MIPS的参考平台;

Yocto构建默认选择的目标平台是qemux86-64,这适用于仿真。

除了这些机器外,OpenEmbedded Coremeta目录中还提供了对以下快速仿真 (Qemu) 机器的支持:

  • qemuarmQEMU ARMv7仿真;
  • qemuarmv5QEMU ARMv5仿真;
  • qemuarm64QEMU ARMv8仿真;
  • qemumipsQEMU MIPS仿真;
  • qemumips64QEMU MIPS64仿真;
  • qemuppcQEMU PowerPC仿真;
  • qemuppc64QEMU PowerPC 64仿真;
  • qemux86-64QEMU x86-64仿真;
  • qemux86QEMU x86仿真;
  • qemuriscv32QEMU RISC-V 32仿真;
  • qemuriscv64QEMU 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文件夹中找到;

亲爱的读者和支持者们,自动博客加入了打赏功能,陆陆续续收到了各位老铁的打赏。在此,我想由衷地感谢每一位对我们博客的支持和打赏。你们的慷慨与支持,是我们前行的动力与源泉。

日期姓名金额
2023-09-06*源19
2023-09-11*朝科88
2023-09-21*号5
2023-09-16*真60
2023-10-26*通9.9
2023-11-04*慎0.66
2023-11-24*恩0.01
2023-12-30I*B1
2024-01-28*兴20
2024-02-01QYing20
2024-02-11*督6
2024-02-18一*x1
2024-02-20c*l18.88
2024-01-01*I5
2024-04-08*程150
2024-04-18*超20
2024-04-26.*V30
2024-05-08D*W5
2024-05-29*辉20
2024-05-30*雄10
2024-06-08*:10
2024-06-23小狮子666
2024-06-28*s6.66
2024-06-29*炼1
2024-06-30*!1
2024-07-08*方20
2024-07-18A*16.66
2024-07-31*北12
2024-08-13*基1
2024-08-23n*s2
2024-09-02*源50
2024-09-04*J2
2024-09-06*强8.8
2024-09-09*波1
2024-09-10*口1
2024-09-10*波1
2024-09-12*波10
2024-09-18*明1.68
2024-09-26B*h10
2024-09-3010
2024-10-02M*i1
2024-10-14*朋10
2024-10-22*海10
2024-10-23*南10
2024-10-26*节6.66
2024-10-27*o5
2024-10-28W*F6.66
2024-10-29R*n6.66
2024-11-02*球6
2024-11-021*鑫6.66
2024-11-25*沙5
2024-11-29C*n2.88
posted @   大奥特曼打小怪兽  阅读(883)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2023-06-06 Rockchip RK3399 - Mali-T860 GPU驱动(mesa+Panfrost)
2018-06-06 第二十二节,TensorFlow中的图片分类模型库slim的使用、数据集处理
如果有任何技术小问题,欢迎大家交流沟通,共同进步

公告 & 打赏

>>

欢迎打赏支持我 ^_^

最新公告

程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)。

了解更多

点击右上角即可分享
微信分享提示