Yocto Linux 量产 BSP 镜像定制
1). 简介
基于 ARM 平台 Yocto Linux BSP 开发嵌入式设备,开发完成后需要生成用于量产的 Yocto Linux BSP 镜像,本文就基于 Toradex Yocto Linux BSP 镜像进行量产定制做流程说明。
2. 准备
a). Toradex Yocto Linux BSP 提供预编译好的基于 Downstream/Mainline Linux Kernel 版本的 Minimal 或者 Multimedia 镜像供客户测试开发,具体可以从下面地址下载。
https://developer.toradex.cn/software/toradex-embedded-software/toradex-download-links-torizon-linux-bsp-wince-and-partner-demos/#toradex-embedded-linux---yocto-project-reference-images
b). Toradex ARM 核心板产品出厂预装 Toradex Easy Installer 工具软件,便于进行量产安装,因此对应使用的 Yocto Linux BSP 镜像也是适用于通过 Toradex Easy Installer 安装的镜像,具体关于 Toradex Easy Installer 的更详细介绍请见如下。
https://developer.toradex.cn/easy-installer/toradex-easy-installer/toradex-easy-installer-overview/
c). 如果熟悉 Yocto Project 编译环境,可以参考如下文章通过 Yocto Project 来定制编译用于量产的 BSP 镜像,本文不做赘述。
https://www.toradex.cn/blog/tong-guo-ycoto-project-ding-zhi-qian-ru-shi-ycoto-linux-jing-xiang
3). 定制流程
a). 本文以适用于 Verdin i.MX8M Plus 的 Yocto Linux Mutimedia BSP Reference Image 镜像为例进行示例,其他平台和版本的 BSP 方法思路都一致。
b). 从这里下载针对 Verdin i.MX8M Plus 的 Yocto Linux Mutimedia BSP Reference Image V7.x 版本,并解压后包含文件如下。
-------------------------------
$ tar xvf Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3.tar
$ cd Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3/
$ tree -L 1
.
├── image.json
├── imx-boot
├── LA_OPT_NXP_SW.html
├── marketing.tar
├── prepare.sh
├── Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz
├── Reference-Multimedia-Image-verdin-imx8mp.rootfs.tar.xz
├── toradexlinux.png
├── u-boot-initial-env-sd
└── wrapup.sh
0 directories, 10 files
-------------------------------
c). image.json 是 BSP 镜像配置文件,Toradex Easy Installer 软件就是通过读取这个文件来进行 BSP 镜像更新的
./ image.json 配置文件详细说明请见如下文章,不同的硬件平台具体的文件会有不同,尤其是底层 bootloader 相关的 binary 文件。本文只将和定制量产镜像相关的参数着重说明。
https://developer.toradex.cn/easy-installer/toradex-easy-installer/toradex-easy-installer-configuration-files
./ “autoinstall” 参数定义了是否自动安装 BSP 镜像
-------------------------------
false - 不自动安装 (default)
true - 自动安装
-------------------------------
./ “u_boot_env” 参数定义了 U-Boot 启动动态加载的环境变量参数,可以将自定义的 U-Boot 环境变量参数更新到这个文件,刷写 BSP 镜像后启动即可以生效。
-------------------------------
u-boot-initial-env-sd (default)
-------------------------------
./ “prepare_script” 参数定义了 Toradex Easy Installer 工具进行分区和烧写镜像操作前需要进行的操作
-------------------------------
prepare.sh (default)
-------------------------------
./ “wrapup_script” 参数定义了 Toradex Easy Installer 工具完成分区和烧写镜像操作后需要进行的操作
-------------------------------
wrapup.sh (default)
-------------------------------
./ “blockdevs” 参数下面就定义了实际需要烧写的镜像以及分区,当然也可以参考上述配置文件说明定制添加自己需要的分区或者只读文件系统等。
// 通常首先是一个 FAT32 分区,用于烧写包括 Linux Kernel Image/Device-Tree Binary/Device-Tree Overlay Binary 等启动文件,”filename” 参数定义了写入的文件压缩包,"uncompressed_size" 定义了要写入文件未压缩前的大小(MB)。如果定制镜像过程中修改了压缩包文件的名字和文件大小就需要修改对应修改这两个参数。
-------------------------------
"label": "BOOT",
"filesystem_type": "FAT",
"mkfs_options": "",
"filename": "Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz",
"uncompressed_size": 8.671875
-------------------------------
// 然后是一个 EXT4 分区,用于烧写 Linux Rootfs 文件系统文件,”filename” 参数定义了写入的文件压缩包,"uncompressed_size" 定义了要写入文件未压缩前的大小(MB)。如果定制镜像过程中修改了 Rootfs 文件系统压缩包文件的名字和文件大小就需要修改对应修改这两个参数。
-------------------------------
"label": "RFS",
"filesystem_type": "ext4",
"mkfs_options": "-E nodiscard",
"filename": "Reference-Multimedia-Image-verdin-imx8mp.rootfs.tar.xz",
"uncompressed_size": 1272.7109375
-------------------------------
// 最后是 Raw 分区,用于烧写包括 Bootloader Binary 等在内的底层引导固件文件,文件可能是一个文件或者多个文件,根据不同的硬件平台不一致。”filename” 参数定义了写入的 Binary 固件文件,比如 Verdin i.MX8MP 平台对应的是 imx-boot 文件就是一个包含 ATF/DDR Firmware/SPL/U-Boot 等的 Boot Container,而比如 Verdin AM62 平台则每个固件都是分开的单独文件。
-------------------------------
"filesystem_type": "raw",
"rawfiles": [
{
"filename": "imx-boot",
"dd_options": "seek=0"
}
]
-------------------------------
d). “imx-boot” 如章节 (c) 说明是 Verdin i.MX8MP 平台对应的 Boot Container 文件,如果需要修改底层 Bootloader,可以参考如下文章修改编译生成新的 “imx-boot” 文件后替换 BSP Image 镜像里面的文件。
https://developer.toradex.cn/linux-bsp/os-development/build-u-boot-and-linux-kernel-from-source-code/build-u-boot/
e). “prepare.sh” 如章节 (c) 说明是烧写镜像前需要进行的操作,通常不需要修改。
f). “wrapup.sh” 如章节 (c) 说明是烧写镜像后进行的操作,如果使能了 “autoinstall” 自动安装可以增加如下内容在完成自动安装后自动重启。
-------------------------------
reboot -f
exit 0
-------------------------------
g). “Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz” 压缩包文件如章节 (c) 说明是 FAT32 启动分区文件,请注意不同 Yocto Linux BSP 版本命名方式可能略有不同。
./ 解压后内容如下
-------------------------------
$ cd Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3/
$ mkdir bootfs
$ tar Jxf Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz -C bootfs/
$ cd bootfs
$ tree -L 1
.
├── boot.scr
├── Image.gz
├── imx8mp-verdin-nonwifi-dahlia.dtb
├── imx8mp-verdin-nonwifi-dev.dtb
├── imx8mp-verdin-nonwifi-ivy.dtb
├── imx8mp-verdin-nonwifi-mallow.dtb
├── imx8mp-verdin-nonwifi-yavia.dtb
├── imx8mp-verdin-wifi-dahlia.dtb
├── imx8mp-verdin-wifi-dev.dtb
├── imx8mp-verdin-wifi-ivy.dtb
├── imx8mp-verdin-wifi-mallow.dtb
├── imx8mp-verdin-wifi-yavia.dtb
├── overlays
└── overlays.txt
1 directory, 13 files
-------------------------------
./ “boot.scr” 文件是 Linux U-Boot Distroboot 配置文件,如果定制 BSP 镜像涉及 Linux Kernel 启动参数相关配置,可以参考这里修改并重新生成这个文件后替换原有文件。
./ 其他文件都是包含 Linux Kernel Image / Device-Tree Binary / Device-Tree Overlay Binary 等文件,如果定制 BSP 涉及了相关修改可以在这里替换原有文件。
./ 修改完成所有要修改的文件后,可以通过如下命令重新压缩,如果命名不变则无需修改 image.json 文件,否则就要对应修改。
-------------------------------
$ cd Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3/bootfs/
$ tar Jcf ../Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz *
$ cd ..
$ rm -rf bootfs/
-------------------------------
h). “Reference-Multimedia-Image-verdin-imx8mp.rootfs.tar.xz” 压缩包文件如章节 (c) 说明是 EXT4 Linux Rootfs 文件系统分区文件,请注意不同 Yocto Linux BSP 版本命名方式可能略有不同。
./ 解压后内容如下
-------------------------------
$ cd Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3/
$ mkdir rootfs
$ sudo tar Jxf Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz -C rootfs/
$ cd rootfs
$ tree -L 1
.
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── media -> run/media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── unit_tests
├── usr
└── var
18 directories, 1 file
-------------------------------
./ 在这里可以进行 Linux Rootfs 相关的修改适配,比如部署应用程序以及相关运行库,配置应用程序开机自启动等,下面是几个简单示例。
-------------------------------
### modify below default autorun systemd service file to make customized application autorun ###
rootfs/lib/systemd/system/wayland-app-launch.service
[Service]
...
ExecStart=/usr/share/cinematicexperience-1.0/Qt5_CinematicExperience --fullscreen
...
### modify below splash picture to adapt customized splash after enabling plymouth in Yocto project ###
rootfs/usr/share/plymouth/themes/spinner/watermark.png
### modify weston configuration file if needed, below for example to hide weston normal shell ###
rootfs/etc/xdg/weston/weston.ini
[core]
...
shell=kiosk-shell.so
...
-------------------------------
./ 修改完成所有要修改的文件后,可以通过如下命令重新压缩,如果命名和大概文件大小不变则无需修改 image.json 文件,否则就要对应修改。
-------------------------------
$ cd Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3/rootfs/
$ sudo tar Jcf ../Reference-Multimedia-Image-verdin-imx8mp.rootfs.tar.xz *
$ cd ..
$ sudo rm -rf rootfs/
-------------------------------
i). “u-boot-initial-env-sd” 如章节 (c) 说明是 U-Boot 环境变量配置文件,可以将定制需要的环境变量修改或者添加在这个文件。比如这里示例添加为了显示 Plymouth Splash 以及关闭 log 输出的环境变量定义。
-------------------------------
tdxargs=quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3’
bootdelay=0
-------------------------------
j). 定制完成后将完整 BSP image 文件复制到 U盘或者 SD 卡,通过模块 Toradex Easy Installer 工具安装到模块进行量产即可。
4). 总结
本文基于 Toradex i.MX8MP ARM 处理器平台示例了 Yocto Linux 量产 BSP 镜像定制流程,其他平台定制思路都是基本一致的。

提交
ARM 处理器平台 eMMC Flash 存储磨损测试示例
NXP iMX8MP 处理器基于 Linux 关闭 Debug Console 输出
ARM 处理器平台 Ethernet Compliance 测试流程示例
基于 NXP iMX8QM 运行 QNX
通过恢复模式更新 Toradex ARM 计算机模块 BSP 镜像