构建Yocto Linux系统
官方介绍如下:
The Yocto Project is an open source collaboration project that provides templates, tools and methods to help you create custom Linux-based systems for embedded products regardless of the hardware architecture.
Yocto Project 是一个开源协作项目,它提供了一些模板、工具和方法来支持面向嵌入式产品的自定义 Linux 系统,不管硬件架构是什么。我想要告诉那些对 yocto 这个名称不甚理解的用户的是,术语 yocto是最小的 SI 单元。最为一个前缀,yocto 表示 10^-24。
Yocto Project 的两大主要组件由 Yocto Project 和 OpenEmbedded 项目一起维护,这两个组件是 BitBake 和 OpenEmbedded-Core,前者是构建引擎,后者是运行构建过程所使用的一套核心配方 (recipe)。
Poky
Poky 是 Yocto Project 的一个参考构建系统。它包含 BitBake、OpenEmbedded-Core、一个板卡支持包 (BSP) 以及整合到构建过程中的其他任何程序包或层。Poky 这一名称也指使用参考构建系统得到的默认 Linux 发行版,它可能极其小 (core-image-minimal),也可能是带有 GUI 的整个 Linux 系统 (core-image-sato)。
您可以将 Poky 构建系统看作是整个项目的一个参考系统,即运行中进程的一个工作示例。在下载 Yocto Project 时,实际上也下载了可用于构建默认系统的这些工具、实用程序、库、工具链和元数据的实例。这一参考系统以及它创建的参考发行版都被命名为 Poky。您还可以将此作为一个起点来创建您自己的发行版,当然,您可以对此发行版随意命名。
所有构建系统都需要的一个项目是工具链:一个编译器、汇编程序、链接器以及为给定架构创建二进制可执行文件所需的其他二进制实用程序。Poky 使用了 GNU Compiler Collection (GCC),不过您也可以指定其他工具链。Poky 使用了一种名为交叉编译 的技术:在一个架构上使用工具链为另一个架构构建二进制可执行文件(例如,在基于 x86 的系统上构建 ARM 发行版)。开发人员常常在嵌入式系统开发中使用交叉编译来利用主机系统的高性能。
Metadata
元数据集按层 进行排列,这样一来每一层都可以为下面的层提供单独的功能。基层是 OpenEmbedded-Core 或 oe-core
,提供了所有构建项目所必需的常见配方、类和相关功能。然后您可以通过在 oe-core
之上添加新层来定制构建。
OpenEmbedded-Core 由 Yocto Project 和 OpenEmbedded 项目共同维护。将 Yocto Project 与 OpenEmbedded 分开的层是 meta-yocto
层,该层提供了 Poky 发行版配置和一组核心的参考 BSP。
OpenEmbedded 项目本身是一个独立的开源项目,具有可与 Yocto Project 交换的配方(大部分)以及与 Yocto Project 类似的目标,但是两者具有不同的治理和范围。
BSP
BSP 包含为特定板卡或架构构建 Linux 必备的基本程序包和驱动程序。这通常由生产板卡的硬件制造商加以维护。BSP 是 Linux 操作系统与运行它的硬件之间的接口。注意,您也可以为虚拟机创建 BSP。
BitBake
BitBake 是一个构建引擎。它读取配方并通过获取程序包来密切关注它们、构建它们并将结果纳入可引导映像。BitBake 由 Yocto Project 和 OpenEmbedded 项目共同维护。
Yocto官方文档资源
Yocto快速入门指南
Bitbake用户手册
Yocto完全手册
Yocto开发手册
Yocto的Linux kernel开发手册
Yocto参考手册
构建Yocto Linux系统
i2SOM已经提供好整个Yocto软件包,可以直接使用。同时还提供了一份download软件包,以节省开发者用于再次下载软件包所花费的时间。
MACHINE参数支持两种设备:
MACHINE参数 | 适用设备 |
i2cmp15xbe | i2C-MP15X底板 + i2S-MP157AI-D512E4核心板 |
i2cmp15xbn | i2C-MP15X底板 + i2S-MP157AI-D256N256核心板 |
构建前,需要把i2SOM-ST-Yocto.tar.gz和i2SOM-Yocto-predl-pkgs.tar.xz文件下载后放在"$HOME/i2SOM-STM32MP1"目录下。
请注意,Yocto构建系统需要有几点注意
这里创建的i2SOM-STM32MP1目录是位于"$HOME"下,即当前用户的家目录,而不是/home目录。
Yocto构建是在普通用户下,请不要使用root用户来构建。
Yocto构建不需要加载SDK的环境变量,如果当前shell有加载,就新建一个shell后再执行Yocto构建的命令。
编译前准备
分别解压Yocto代码,downloads,sstate-cache目录。
downloads是Yocto在编译期间默认下载需要的软件包的目录。为了节省时间,p提供了提前下载好的软件包,可以节省下载时间。
sstate-cache是Yocto在编译时使用的软件包校验信息目录。为了节省时间,提供了的sstate-cache目录,可以节省下载时间。
$ cd $HOME/i2SOM-STM32MP1
$ tar xvf i2SOM-ST-Yocto.tar.gz
$ tar xvf i2som-stm32mp1-predownload.tar.xz
$ tar xvf i2som-stm32mp1-sstate-cache.tar.xz
$ cd i2SOM-ST-Yocto
$ DISTRO=openstlinux-weston MACHINE=i2cmp15xbe source layers/meta-i2som-styocto/scripts/envsetup.sh
解压后的目录结构如下
$ tree -L 1 i2SOM-STM32MP1
i2SOM-STM32MP1
├── arm-trusted-firmware
├── arm-trusted-firmware-a26789cad.tar.gz
├── downloads
├── i2som-pangu-sstate-cache.tar.xz
├── i2som-stm32mp1-predownloads.tar.xz
├── i2SOM-ST-Yocto
├── i2SOM-ST-Yocto.tar.gz
├── linux-st
├── Makefile.sdk
├── sstate-cache
├── u-boot-st
└── u-boot-st-656fae51.tar.gz
上面的最后一步是初始化Yocto的构建目录,执行后会自动创建i2c6ulxbn目录,并加载相应的环境变量至当前shell环境。
如果退出当前shell环境后,可以使用以下命令重新进入已创建好的构建目录
$ DISTRO=openstlinux-weston MACHINE=i2cmp15xbe source layers/meta-i2som-styocto/scripts/envsetup.sh
i2SOM Yocto的提供了以下系统镜像:
DISTRO | 镜像名称 | 系统名称 | 描述 | 应用场景 |
openstlinux-eglfs openstlinux-weston | core-image-base | 命令行版系统(CommandLine System) | 不包含任何图形库 | 适合无显示的产品,通讯网关、工业控制器、数据采集器等 |
openstlinux-eglfs | i2som-image-qt | Qt5图形产品版系统(GUI System) | 包含基于Qt5图形库 | 适合需要人机交互、图表显示的产品,智能家居控制、工业辅助操作仪表 |
openstlinux-weston | i2som-image-weston | 基于Wayland的weston镜像weston | 包含基于Wayland图形库 | 适合需要人机交互、图表显示的产品,智能家居控制、工业辅助操作仪表 |
构建包含Qt图形框架的系统
下面开始为i2C-MP15X-B开发板构建Qt图形框架的系统。
$ bitbake i2som-image-qt
构建花费的时间,取决计算机的CPU,内存和硬盘。CPU决定并行的任务数量。Yocto在编译时会产生大量文件,因此SSD会比HDD的速度快很多。
构建完成后,会在当前目录下的"tmp-glibc/deploy/images/i2cmp15xbe/"目录下看到构建出的镜像文件,如下表。
$ ls -lh tmp-glibc/deploy/images/i2cmp15xbe/
total 2.2G
drwxr-xr-x 2 stevechen stevechen 4.0K Apr 6 21:25 flashlayout_i2som-image-qt
-rw-r--r-- 1 stevechen stevechen 64M Apr 6 22:14 i2som-image-bootfs-openstlinux-eglfs-i2cmp15xbe-20200406141333.bootfs.ext4
-rw-r--r-- 1 stevechen stevechen 6.0M Apr 6 22:13 i2som-image-bootfs-openstlinux-eglfs-i2cmp15xbe-20200406141333.bootfs.ext4.gz
-rw-r--r-- 1 stevechen stevechen 5.9M Apr 6 22:13 i2som-image-bootfs-openstlinux-eglfs-i2cmp15xbe-20200406141333.bootfs.tar.xz
-rw-r--r-- 1 stevechen stevechen 155 Apr 6 22:13 i2som-image-bootfs-openstlinux-eglfs-i2cmp15xbe-20200406141333.rootfs.manifest
-rw-r--r-- 1 stevechen stevechen 313K Apr 6 22:13 i2som-image-bootfs-openstlinux-eglfs-i2cmp15xbe-20200406141333.testdata.json
lrwxrwxrwx 1 stevechen stevechen 74 Apr 6 22:13 i2som-image-bootfs-openstlinux-eglfs-i2cmp15xbe.ext4 -> i2som-image-bootfs-openstlinux-eglfs-i2cmp15xbe-20
200406141333.bootfs.ext4
lrwxrwxrwx 1 stevechen stevechen 77 Apr 6 22:13 i2som-image-bootfs-openstlinux-eglfs-i2cmp15xbe.ext4.gz -> i2som-image-bootfs-openstlinux-eglfs-i2cmp15xbe
-20200406141333.bootfs.ext4.gz
lrwxrwxrwx 1 stevechen stevechen 78 Apr 6 22:13 i2som-image-bootfs-openstlinux-eglfs-i2cmp15xbe.manifest -> i2som-image-bootfs-openstlinux-eglfs-i2cmp15xb
e-20200406141333.rootfs.manifest
lrwxrwxrwx 1 stevechen stevechen 76 Apr 6 22:13 i2som-image-bootfs-openstlinux-eglfs-i2cmp15xbe.tar.xz -> i2som-image-bootfs-openstlinux-eglfs-i2cmp15xbe-
20200406141333.bootfs.tar.xz
lrwxrwxrwx 1 stevechen stevechen 76 Apr 6 22:13 i2som-image-bootfs-openstlinux-eglfs-i2cmp15xbe.testdata.json -> i2som-image-bootfs-openstlinux-eglfs-i2cm
p15xbe-20200406141333.testdata.json
-rw-r--r-- 1 stevechen stevechen 1.2G Apr 6 21:24 i2som-image-qt-openstlinux-eglfs-i2cmp15xbe-20200406121619.rootfs.ext4
-rw-r--r-- 1 stevechen stevechen 548M Apr 6 21:25 i2som-image-qt-openstlinux-eglfs-i2cmp15xbe-20200406121619.rootfs.ext4.gz
-rw-r--r-- 1 stevechen stevechen 68K Apr 6 21:24 i2som-image-qt-openstlinux-eglfs-i2cmp15xbe-20200406121619.rootfs.manifest
-rw-r--r-- 1 stevechen stevechen 473M Apr 6 21:25 i2som-image-qt-openstlinux-eglfs-i2cmp15xbe-20200406121619.rootfs.tar.xz
-rw-r--r-- 1 stevechen stevechen 334K Apr 6 21:24 i2som-image-qt-openstlinux-eglfs-i2cmp15xbe-20200406121619.testdata.json
lrwxrwxrwx 1 stevechen stevechen 70 Apr 6 21:25 i2som-image-qt-openstlinux-eglfs-i2cmp15xbe.ext4 -> i2som-image-qt-openstlinux-eglfs-i2cmp15xbe-2020040612
1619.rootfs.ext4
lrwxrwxrwx 1 stevechen stevechen 73 Apr 6 21:25 i2som-image-qt-openstlinux-eglfs-i2cmp15xbe.ext4.gz -> i2som-image-qt-openstlinux-eglfs-i2cmp15xbe-2020040
6121619.rootfs.ext4.gz
lrwxrwxrwx 1 stevechen stevechen 74 Apr 6 21:24 i2som-image-qt-openstlinux-eglfs-i2cmp15xbe.manifest -> i2som-image-qt-openstlinux-eglfs-i2cmp15xbe-202004
06121619.rootfs.manifest
lrwxrwxrwx 1 stevechen stevechen 72 Apr 6 21:25 i2som-image-qt-openstlinux-eglfs-i2cmp15xbe.tar.xz -> i2som-image-qt-openstlinux-eglfs-i2cmp15xbe-20200406
121619.rootfs.tar.xz
lrwxrwxrwx 1 stevechen stevechen 72 Apr 6 21:24 i2som-image-qt-openstlinux-eglfs-i2cmp15xbe.testdata.json -> i2som-image-qt-openstlinux-eglfs-i2cmp15xbe-2
0200406121619.testdata.json
-rw-r--r-- 2 stevechen stevechen 3.9K Apr 6 20:32 i2som-image-userfs-openstlinux-eglfs-i2cmp15xbe-20200406121619.rootfs.manifest
-rw-r--r-- 2 stevechen stevechen 313K Apr 6 20:32 i2som-image-userfs-openstlinux-eglfs-i2cmp15xbe-20200406121619.testdata.json
-rw-r--r-- 2 stevechen stevechen 64M Apr 6 20:33 i2som-image-userfs-openstlinux-eglfs-i2cmp15xbe-20200406121619.userfs.ext4
-rw-r--r-- 2 stevechen stevechen 1.2M Apr 6 20:33 i2som-image-userfs-openstlinux-eglfs-i2cmp15xbe-20200406121619.userfs.ext4.gz
-rw-r--r-- 2 stevechen stevechen 597K Apr 6 20:33 i2som-image-userfs-openstlinux-eglfs-i2cmp15xbe-20200406121619.userfs.tar.xz
lrwxrwxrwx 2 stevechen stevechen 74 Apr 6 20:33 i2som-image-userfs-openstlinux-eglfs-i2cmp15xbe.ext4 -> i2som-image-userfs-openstlinux-eglfs-i2cmp15xbe-20
200406121619.userfs.ext4
lrwxrwxrwx 2 stevechen stevechen 77 Apr 6 20:33 i2som-image-userfs-openstlinux-eglfs-i2cmp15xbe.ext4.gz -> i2som-image-userfs-openstlinux-eglfs-i2cmp15xbe
-20200406121619.userfs.ext4.gz
lrwxrwxrwx 2 stevechen stevechen 78 Apr 6 20:32 i2som-image-userfs-openstlinux-eglfs-i2cmp15xbe.manifest -> i2som-image-userfs-openstlinux-eglfs-i2cmp15xb
e-20200406121619.rootfs.manifest
lrwxrwxrwx 2 stevechen stevechen 76 Apr 6 20:33 i2som-image-userfs-openstlinux-eglfs-i2cmp15xbe.tar.xz -> i2som-image-userfs-openstlinux-eglfs-i2cmp15xbe-
20200406121619.userfs.tar.xz
lrwxrwxrwx 2 stevechen stevechen 76 Apr 6 20:32 i2som-image-userfs-openstlinux-eglfs-i2cmp15xbe.testdata.json -> i2som-image-userfs-openstlinux-eglfs-i2cm
p15xbe-20200406121619.testdata.json
lrwxrwxrwx 2 stevechen stevechen 64 Apr 6 17:10 Image -> Image--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.bin
-rw-r--r-- 2 stevechen stevechen 15M Apr 6 17:10 Image--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.bin
lrwxrwxrwx 2 stevechen stevechen 64 Apr 6 17:10 Image-i2cmp15xbe.bin -> Image--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.bin
drwxr-xr-x 2 stevechen stevechen 4.0K Apr 6 22:15 scripts
-rw-r--r-- 2 stevechen stevechen 264 Apr 6 17:11 st-image-vendorfs-openstlinux-eglfs-i2cmp15xbe-20200406085301.rootfs.manifest
-rw-r--r-- 2 stevechen stevechen 312K Apr 6 17:11 st-image-vendorfs-openstlinux-eglfs-i2cmp15xbe-20200406085301.testdata.json
-rw-r--r-- 2 stevechen stevechen 16M Apr 6 17:11 st-image-vendorfs-openstlinux-eglfs-i2cmp15xbe-20200406085301.vendorfs.ext4
-rw-r--r-- 2 stevechen stevechen 2.6M Apr 6 17:11 st-image-vendorfs-openstlinux-eglfs-i2cmp15xbe-20200406085301.vendorfs.ext4.gz
-rw-r--r-- 2 stevechen stevechen 2.2M Apr 6 17:11 st-image-vendorfs-openstlinux-eglfs-i2cmp15xbe-20200406085301.vendorfs.tar.xz
lrwxrwxrwx 2 stevechen stevechen 75 Apr 6 17:11 st-image-vendorfs-openstlinux-eglfs-i2cmp15xbe.ext4 -> st-image-vendorfs-openstlinux-eglfs-i2cmp15xbe-2020
0406085301.vendorfs.ext4
lrwxrwxrwx 2 stevechen stevechen 78 Apr 6 17:11 st-image-vendorfs-openstlinux-eglfs-i2cmp15xbe.ext4.gz -> st-image-vendorfs-openstlinux-eglfs-i2cmp15xbe-2
0200406085301.vendorfs.ext4.gz
lrwxrwxrwx 2 stevechen stevechen 77 Apr 6 17:11 st-image-vendorfs-openstlinux-eglfs-i2cmp15xbe.manifest -> st-image-vendorfs-openstlinux-eglfs-i2cmp15xbe-
20200406085301.rootfs.manifest
lrwxrwxrwx 2 stevechen stevechen 77 Apr 6 17:11 st-image-vendorfs-openstlinux-eglfs-i2cmp15xbe.tar.xz -> st-image-vendorfs-openstlinux-eglfs-i2cmp15xbe-20
200406085301.vendorfs.tar.xz
lrwxrwxrwx 2 stevechen stevechen 75 Apr 6 17:11 st-image-vendorfs-openstlinux-eglfs-i2cmp15xbe.testdata.json -> st-image-vendorfs-openstlinux-eglfs-i2cmp1
5xbe-20200406085301.testdata.json
-rw-r--r-- 2 stevechen stevechen 71K Apr 6 17:10 stm32mp157a-i2cmp15xbe-lcd043p800c--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.dtb
lrwxrwxrwx 2 stevechen stevechen 93 Apr 6 17:10 stm32mp157a-i2cmp15xbe-lcd043p800c.dtb -> stm32mp157a-i2cmp15xbe-lcd043p800c--4.19+github+0+069c68f830-r0-
i2cmp15xbe-20200406085301.dtb
-rw-r--r-- 2 stevechen stevechen 71K Apr 6 17:10 stm32mp157a-i2cmp15xbe-lcd043p800c-dualcan--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.dtb
lrwxrwxrwx 2 stevechen stevechen 101 Apr 6 17:10 stm32mp157a-i2cmp15xbe-lcd043p800c-dualcan.dtb -> stm32mp157a-i2cmp15xbe-lcd043p800c-dualcan--4.19+github+
0+069c68f830-r0-i2cmp15xbe-20200406085301.dtb
lrwxrwxrwx 2 stevechen stevechen 101 Apr 6 17:10 stm32mp157a-i2cmp15xbe-lcd043p800c-dualcan-i2cmp15xbe.dtb -> stm32mp157a-i2cmp15xbe-lcd043p800c-dualcan--4
.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.dtb
lrwxrwxrwx 2 stevechen stevechen 93 Apr 6 17:10 stm32mp157a-i2cmp15xbe-lcd043p800c-i2cmp15xbe.dtb -> stm32mp157a-i2cmp15xbe-lcd043p800c--4.19+github+0+069
c68f830-r0-i2cmp15xbe-20200406085301.dtb
-rw-r--r-- 2 stevechen stevechen 71K Apr 6 17:10 stm32mp157a-i2cmp15xbe-lcd070p1024c--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.dtb
lrwxrwxrwx 2 stevechen stevechen 94 Apr 6 17:10 stm32mp157a-i2cmp15xbe-lcd070p1024c.dtb -> stm32mp157a-i2cmp15xbe-lcd070p1024c--4.19+github+0+069c68f830-r
0-i2cmp15xbe-20200406085301.dtb
-rw-r--r-- 2 stevechen stevechen 71K Apr 6 17:10 stm32mp157a-i2cmp15xbe-lcd070p1024c-dualcan--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.dtb
lrwxrwxrwx 2 stevechen stevechen 102 Apr 6 17:10 stm32mp157a-i2cmp15xbe-lcd070p1024c-dualcan.dtb -> stm32mp157a-i2cmp15xbe-lcd070p1024c-dualcan--4.19+githu
b+0+069c68f830-r0-i2cmp15xbe-20200406085301.dtb
lrwxrwxrwx 2 stevechen stevechen 102 Apr 6 17:10 stm32mp157a-i2cmp15xbe-lcd070p1024c-dualcan-i2cmp15xbe.dtb -> stm32mp157a-i2cmp15xbe-lcd070p1024c-dualcan-
-4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.dtb
lrwxrwxrwx 2 stevechen stevechen 94 Apr 6 17:10 stm32mp157a-i2cmp15xbe-lcd070p1024c-i2cmp15xbe.dtb -> stm32mp157a-i2cmp15xbe-lcd070p1024c--4.19+github+0+0
69c68f830-r0-i2cmp15xbe-20200406085301.dtb
-rw-r--r-- 2 stevechen stevechen 72K Apr 6 17:10 stm32mp157a-i2cmp15xbe-mipi--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.dtb
lrwxrwxrwx 2 stevechen stevechen 86 Apr 6 17:10 stm32mp157a-i2cmp15xbe-mipi.dtb -> stm32mp157a-i2cmp15xbe-mipi--4.19+github+0+069c68f830-r0-i2cmp15xbe-202
00406085301.dtb
-rw-r--r-- 2 stevechen stevechen 72K Apr 6 17:10 stm32mp157a-i2cmp15xbe-mipi-dualcan--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.dtb
lrwxrwxrwx 2 stevechen stevechen 94 Apr 6 17:10 stm32mp157a-i2cmp15xbe-mipi-dualcan.dtb -> stm32mp157a-i2cmp15xbe-mipi-dualcan--4.19+github+0+069c68f830-r
0-i2cmp15xbe-20200406085301.dtb
lrwxrwxrwx 2 stevechen stevechen 94 Apr 6 17:10 stm32mp157a-i2cmp15xbe-mipi-dualcan-i2cmp15xbe.dtb -> stm32mp157a-i2cmp15xbe-mipi-dualcan--4.19+github+0+0
69c68f830-r0-i2cmp15xbe-20200406085301.dtb
lrwxrwxrwx 2 stevechen stevechen 86 Apr 6 17:10 stm32mp157a-i2cmp15xbe-mipi-i2cmp15xbe.dtb -> stm32mp157a-i2cmp15xbe-mipi--4.19+github+0+069c68f830-r0-i2c
mp15xbe-20200406085301.dtb
-rw-r--r-- 1 stevechen stevechen 240K Apr 6 17:03 tf-a-stm32mp157a-i2cmp15xbe-trusted.stm32
-rw-r--r-- 1 stevechen stevechen 732K Apr 6 17:04 u-boot-stm32mp157a-i2cmp15xbe-trusted.stm32
lrwxrwxrwx 2 stevechen stevechen 65 Apr 6 17:10 uImage -> uImage--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.bin
-rw-r--r-- 2 stevechen stevechen 5.8M Apr 6 17:10 uImage--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.bin
lrwxrwxrwx 2 stevechen stevechen 65 Apr 6 17:10 uImage-i2cmp15xbe.bin -> uImage--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.bin
lrwxrwxrwx 2 stevechen stevechen 66 Apr 6 17:10 vmlinux -> vmlinux--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.bin
-rw-r--r-- 2 stevechen stevechen 181M Apr 6 17:10 vmlinux--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.bin
lrwxrwxrwx 2 stevechen stevechen 66 Apr 6 17:10 vmlinux-i2cmp15xbe.bin -> vmlinux--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.bin
lrwxrwxrwx 2 stevechen stevechen 65 Apr 6 17:10 zImage -> zImage--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.bin
-rw-r--r-- 2 stevechen stevechen 5.8M Apr 6 17:10 zImage--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.bin
lrwxrwxrwx 2 stevechen stevechen 65 Apr 6 17:10 zImage-i2cmp15xbe.bin -> zImage--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.bin
上面列出的构建后的文件中,有一些是链接文件,可以先忽略。下面表格是构建出的文件描述:
文件后缀 | 文件说明 |
*.ext4 | 目标镜像的ext4文件系统格式的文件 |
*.ext4.gz | 目标镜像的ext4文件系统压缩格式的文件 |
*.manifest | 目标镜像内包含的软件包列表文件 |
*.tar.xz | 目标镜像的tar.xz格式的文件 |
<br>tf-a-stm32mp157a-i2cmp15xbe-trusted.stm32<br> | i2C-MP15X-B开发板运行在trusted bootchian下的第一级bootloader程序,即FSBL |
u-boot-stm32mp157a-i2cmp15xbe-trusted.stm32 | i2C-MP15X-B开发板运行在trusted bootchain下的第二级bootloader程序,即SSBL |
<br>uImage--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.bin<br> | Linux kernel uImage文件 |
<br>stm32mp157a-i2cmp15xbe-lcd043p800c--4.19+github+0+069c68f830-r0-<br>i2cmp15xbe-20200406085301.dtb<br> | i2C-MP15X-B开发板的DeviceTree设备描述文件,支持i2M-LCD043P800C显示模块 |
stm32mp157a-i2cmp15xbe-lcd043p800c-dualcan--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.dtb | i2C-MP15X-B开发板的DeviceTree设备描述文件,支持i2M-LCD043P800C显示模块,并且启动两个CAN功能 |
stm32mp157a-i2cmp15xbe-lcd070p1024c--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.dtb | i2C-MP15X-B开发板的DeviceTree设备描述文件,支持i2M-LCD070P1024C显示模块 |
stm32mp157a-i2cmp15xbe-lcd070p1024c-dualcan--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.dtb | i2C-MP15X-B开发板的DeviceTree设备描述文件,支持i2M-LCD043P1024C显示模块,并且启动两个CAN功能 |
stm32mp157a-i2cmp15xbe-mipi-dualcan--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.dtb | i2C-MP15X-B开发板的DeviceTree设备描述文件,支持MiPi显示模块 |
stm32mp157a-i2cmp15xbe-mipi-dualcan--4.19+github+0+069c68f830-r0-i2cmp15xbe-20200406085301.dtb | i2C-MP15X-B开发板的DeviceTree设备描述文件,支持MiPi显示模块,并启用两个CAN功能 |
<br>flashlayout_i2som-image-qt<br> | flashlayout_i2som-image-qt目录是用于STM32CubeProgrammer使用 USB烧写的配置文件 |
更新U-Boot和Linux内核代码
Yocto的开发流程中是让各个软件自行管理版本,Yocto只是作为构建的工具。U-Boot,Linux kernel的代码,需要使用git功能来管理,每次修改后需要提交到本地仓库,如果有远程仓库也需要推送到远程仓库。然后修改对应的bb文件,才能让Yocto使用新版本的代码来编译。
U-Boot
i2SOM-ST-Yocto/meta-i2som-styocto/recipes-bsp/u-boot/u-boot-i2som-common_2018.11.inc
SRCREV_class-devupstream 表示git commit id的SHA-1 校验和值,更换为新的值即可。
Linux kernel
i2SOM-ST-Yocto/meta-i2som-styocto/recipes-kernel/linux/linux-i2som_4.19.bb
SRCREV 表示git commit id的SHA-1 校验和值,更换为新的值即可。
Bitbake命令
Bitbake是Yocto上提供给开发者使用的构建命令,其语法如下:
bitbake [options] [recipename/target recipe:do_task ...]
以下是Bitbake常用的参数和用法,使用bitbake命令前,必须先执行过初始化Yocto构建。
构建一个软件包
$ bitbake recipe
删除文件
Bitbake中删除文件有三种方式。
仅删除解压任务后的输出文件
删除目标从"do_unpack"任务后所有输出的文件(do_unpack
, do_configure
, do_compile
, do_install
, and do_package
)
$ bitbake -c clean recipe
删除文件和源代码
删除目标的所有输出文件、sstate缓存和下载的源文件(即DL_DIR目录下的文件)。本质上,do cleanall任务与do cleansstate任务相同,只是增加了删除下载的源文件。
$ bitbake -c cleanall recipe
删除目标的所有输出文件和sstate缓存。本质上,do_cleansstate任务与do_clean任务是相同的,只是添加了对sstate缓存的删除。
$ bitbake -c cleansstate recipe
显示构建时的环境变量
$ bitbake -e foo
最后编辑:SteveChen 更新时间:2024-09-18 16:45