工控網首頁
>

應用設計

>

Yocto Linux 量產 BSP 鏡像定制

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 鏡像