工控網(wǎng)首頁(yè)
>

應(yīng)用設(shè)計(jì)

>

Yocto Linux 量產(chǎn) BSP 鏡像定制

Yocto Linux 量產(chǎn) BSP 鏡像定制

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盤或者 SD 卡,通過(guò)模塊 Toradex Easy Installer 工具安裝到模塊進(jìn)行量產(chǎn)即可。

 

4). 總結(jié)

本文基于 Toradex i.MX8MP ARM 處理器平臺(tái)示例了 Yocto Linux 量產(chǎn) BSP 鏡像定制流程,其他平臺(tái)定制思路都是基本一致的。

審核編輯(
王靜
)
投訴建議

提交

查看更多評(píng)論
其他資訊

查看更多

ARM 處理器平臺(tái) eMMC Flash 存儲(chǔ)磨損測(cè)試示例

NXP iMX8MP 處理器基于 Linux 關(guān)閉 Debug Console 輸出

ARM 處理器平臺(tái) Ethernet Compliance 測(cè)試流程示例

基于 NXP iMX8QM 運(yùn)行 QNX

通過(guò)恢復(fù)模式更新 Toradex ARM 計(jì)算機(jī)模塊 BSP 鏡像