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