Yocto Linux 量產(chǎn) BSP 鏡像定制
By Toradex秦海
1). 簡(jiǎn)介
基于 ARM 平臺(tái) Yocto Linux BSP 開(kāi)發(fā)嵌入式設(shè)備,開(kāi)發(fā)完成后需要生成用于量產(chǎn)的 Yocto Linux BSP 鏡像,本文就基于 Toradex Yocto Linux BSP 鏡像進(jìn)行量產(chǎn)定制做流程說(shuō)明。
2. 準(zhǔn)備
a). Toradex Yocto Linux BSP 提供預(yù)編譯好的基于 Downstream/Mainline Linux Kernel 版本的 Minimal 或者 Multimedia 鏡像供客戶測(cè)試開(kāi)發(fā),具體可以從下面地址下載。
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 核心板產(chǎn)品出廠預(yù)裝 Toradex Easy Installer 工具軟件,便于進(jìn)行量產(chǎn)安裝,因此對(duì)應(yīng)使用的 Yocto Linux BSP 鏡像也是適用于通過(guò) Toradex Easy Installer 安裝的鏡像,具體關(guān)于 Toradex Easy Installer 的更詳細(xì)介紹請(qǐng)見(jiàn)如下。
https://developer.toradex.cn/easy-installer/toradex-easy-installer/toradex-easy-installer-overview/
c). 如果熟悉 Yocto Project 編譯環(huán)境,可以參考如下文章通過(guò) Yocto Project 來(lái)定制編譯用于量產(chǎn)的 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 鏡像為例進(jìn)行示例,其他平臺(tái)和版本的 BSP 方法思路都一致。
b). 從這里下載針對(duì) 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 軟件就是通過(guò)讀取這個(gè)文件來(lái)進(jìn)行 BSP 鏡像更新的
./ image.json 配置文件詳細(xì)說(shuō)明請(qǐng)見(jiàn)如下文章,不同的硬件平臺(tái)具體的文件會(huì)有不同,尤其是底層 bootloader 相關(guān)的 binary 文件。本文只將和定制量產(chǎn)鏡像相關(guān)的參數(shù)著重說(shuō)明。
https://developer.toradex.cn/easy-installer/toradex-easy-installer/toradex-easy-installer-configuration-files
./ “autoinstall” 參數(shù)定義了是否自動(dòng)安裝 BSP 鏡像
-------------------------------
false - 不自動(dòng)安裝 (default)
true - 自動(dòng)安裝
-------------------------------
./ “u_boot_env” 參數(shù)定義了 U-Boot 啟動(dòng)動(dòng)態(tài)加載的環(huán)境變量參數(shù),可以將自定義的 U-Boot 環(huán)境變量參數(shù)更新到這個(gè)文件,刷寫(xiě) BSP 鏡像后啟動(dòng)即可以生效。
-------------------------------
u-boot-initial-env-sd (default)
-------------------------------
./ “prepare_script” 參數(shù)定義了 Toradex Easy Installer 工具進(jìn)行分區(qū)和燒寫(xiě)鏡像操作前需要進(jìn)行的操作
-------------------------------
prepare.sh (default)
-------------------------------
./ “wrapup_script” 參數(shù)定義了 Toradex Easy Installer 工具完成分區(qū)和燒寫(xiě)鏡像操作后需要進(jìn)行的操作
-------------------------------
wrapup.sh (default)
-------------------------------
./ “blockdevs” 參數(shù)下面就定義了實(shí)際需要燒寫(xiě)的鏡像以及分區(qū),當(dāng)然也可以參考上述配置文件說(shuō)明定制添加自己需要的分區(qū)或者只讀文件系統(tǒng)等。
// 通常首先是一個(gè) FAT32 分區(qū),用于燒寫(xiě)包括 Linux Kernel Image/Device-Tree Binary/Device-Tree Overlay Binary 等啟動(dòng)文件,”filename” 參數(shù)定義了寫(xiě)入的文件壓縮包,"uncompressed_size" 定義了要寫(xiě)入文件未壓縮前的大小(MB)。如果定制鏡像過(guò)程中修改了壓縮包文件的名字和文件大小就需要修改對(duì)應(yīng)修改這兩個(gè)參數(shù)。
-------------------------------
"label": "BOOT",
"filesystem_type": "FAT",
"mkfs_options": "",
"filename": "Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz",
"uncompressed_size": 8.671875
-------------------------------
// 然后是一個(gè) EXT4 分區(qū),用于燒寫(xiě) Linux Rootfs 文件系統(tǒng)文件,”filename” 參數(shù)定義了寫(xiě)入的文件壓縮包,"uncompressed_size" 定義了要寫(xiě)入文件未壓縮前的大小(MB)。如果定制鏡像過(guò)程中修改了 Rootfs 文件系統(tǒng)壓縮包文件的名字和文件大小就需要修改對(duì)應(yīng)修改這兩個(gè)參數(shù)。
-------------------------------
"label": "RFS",
"filesystem_type": "ext4",
"mkfs_options": "-E nodiscard",
"filename": "Reference-Multimedia-Image-verdin-imx8mp.rootfs.tar.xz",
"uncompressed_size": 1272.7109375
-------------------------------
// 最后是 Raw 分區(qū),用于燒寫(xiě)包括 Bootloader Binary 等在內(nèi)的底層引導(dǎo)固件文件,文件可能是一個(gè)文件或者多個(gè)文件,根據(jù)不同的硬件平臺(tái)不一致。”filename” 參數(shù)定義了寫(xiě)入的 Binary 固件文件,比如 Verdin i.MX8MP 平臺(tái)對(duì)應(yīng)的是 imx-boot 文件就是一個(gè)包含 ATF/DDR Firmware/SPL/U-Boot 等的 Boot Container,而比如 Verdin AM62 平臺(tái)則每個(gè)固件都是分開(kāi)的單獨(dú)文件。
-------------------------------
"filesystem_type": "raw",
"rawfiles": [
{
"filename": "imx-boot",
"dd_options": "seek=0"
}
]
-------------------------------
d). “imx-boot” 如章節(jié) (c) 說(shuō)明是 Verdin i.MX8MP 平臺(tái)對(duì)應(yīng)的 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” 如章節(jié) (c) 說(shuō)明是燒寫(xiě)鏡像前需要進(jìn)行的操作,通常不需要修改。
f). “wrapup.sh” 如章節(jié) (c) 說(shuō)明是燒寫(xiě)鏡像后進(jìn)行的操作,如果使能了 “autoinstall” 自動(dòng)安裝可以增加如下內(nèi)容在完成自動(dòng)安裝后自動(dòng)重啟。
-------------------------------
reboot -f
exit 0
-------------------------------
g). “Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz” 壓縮包文件如章節(jié) (c) 說(shuō)明是 FAT32 啟動(dòng)分區(qū)文件,請(qǐng)注意不同 Yocto Linux BSP 版本命名方式可能略有不同。
./ 解壓后內(nèi)容如下
-------------------------------
$ 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 啟動(dòng)參數(shù)相關(guān)配置,可以參考這里修改并重新生成這個(gè)文件后替換原有文件。
./ 其他文件都是包含 Linux Kernel Image / Device-Tree Binary / Device-Tree Overlay Binary 等文件,如果定制 BSP 涉及了相關(guān)修改可以在這里替換原有文件。
./ 修改完成所有要修改的文件后,可以通過(guò)如下命令重新壓縮,如果命名不變則無(wú)需修改 image.json 文件,否則就要對(duì)應(yīng)修改。
-------------------------------
$ 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” 壓縮包文件如章節(jié) (c) 說(shuō)明是 EXT4 Linux Rootfs 文件系統(tǒng)分區(qū)文件,請(qǐng)注意不同 Yocto Linux BSP 版本命名方式可能略有不同。
./ 解壓后內(nèi)容如下
-------------------------------
$ 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
-------------------------------
./ 在這里可以進(jìn)行 Linux Rootfs 相關(guān)的修改適配,比如部署應(yīng)用程序以及相關(guān)運(yùn)行庫(kù),配置應(yīng)用程序開(kāi)機(jī)自啟動(dòng)等,下面是幾個(gè)簡(jiǎn)單示例。
-------------------------------
### 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
...
-------------------------------
./ 修改完成所有要修改的文件后,可以通過(guò)如下命令重新壓縮,如果命名和大概文件大小不變則無(wú)需修改 image.json 文件,否則就要對(duì)應(yīng)修改。
-------------------------------
$ 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” 如章節(jié) (c) 說(shuō)明是 U-Boot 環(huán)境變量配置文件,可以將定制需要的環(huán)境變量修改或者添加在這個(gè)文件。比如這里示例添加為了顯示 Plymouth Splash 以及關(guān)閉 log 輸出的環(huán)境變量定義。
-------------------------------
tdxargs=quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3’
bootdelay=0
-------------------------------
j). 定制完成后將完整 BSP image 文件復(fù)制到 U盤(pán)或者 SD 卡,通過(guò)模塊 Toradex Easy Installer 工具安裝到模塊進(jìn)行量產(chǎn)即可。
4). 總結(jié)
本文基于 Toradex i.MX8MP ARM 處理器平臺(tái)示例了 Yocto Linux 量產(chǎn) BSP 鏡像定制流程,其他平臺(tái)定制思路都是基本一致的。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。