"); //-->
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)系工作人員刪除。
相關(guān)推薦
OSM模塊由NXP i.MX 95驅(qū)動,用于邊緣 AI
Arm重磅推出AGI CPU 1OU 雙節(jié)點參考服務(wù)器
康佳特推出首款 Arm 架構(gòu) SMARC 模塊
最新ARM技術(shù)和嵌入式技術(shù)發(fā)展動態(tài) 中
WinCE+ARM開發(fā)及關(guān)鍵技術(shù) 下
ARM嵌入式軟件編程經(jīng)驗談
ARM嵌入式系統(tǒng)開發(fā)
Arm與Linaro聯(lián)合發(fā)起行業(yè)聯(lián)盟 CoreCollective
“當(dāng)TDC-GP22遇到ARM CortexM3” ——世強專家解讀智能超聲波水表的技術(shù)創(chuàng)新趨勢
RTL8201L缺貨,xiaohua,E-ARM你們買得到嗎?
咱們的e-Arm進(jìn)行的咋樣了?板子畫了嗎?
ARM開發(fā)詳解
Arm自研芯片掀「跨界戰(zhàn)爭」 臺積電旗下創(chuàng)意恐首當(dāng)其沖
天勢科技與Arm戰(zhàn)略合作,為人工智能驅(qū)動的個人 “智能自動駕駛汽車” 提供技術(shù)支持
Cyclone V SoC開發(fā)套件和SoC嵌入式設(shè)計套裝
最新ARM技術(shù)和嵌入式技術(shù)發(fā)展動態(tài) 下
e-ARM的PCB板已經(jīng)做好,s3c4510b很快買到
ARM 展示小型低功耗上網(wǎng)本樣品
基于ARM-Linux的MiniGUI的仿真與移植
NXP 發(fā)布eIQ代理AI框架,實現(xiàn)安全邊緣自治
arm學(xué)習(xí)資料
WinCE+ARM開發(fā)及關(guān)鍵技術(shù) 上
Arm再創(chuàng)季度營收紀(jì)錄
Arm AGI CPU:智能體式人工智能云時代的芯片基石
MF RC522讀寫器電路圖
本站成立e-ARM開發(fā)工作室!
基于ARM/DSP 的高性能驅(qū)動方案
今日上傳e-ARM全部文檔至本站下載區(qū)
摩爾線程推出ARM架構(gòu)SoC“長江” 進(jìn)軍筆記本芯片市場
ARM嵌入式系統(tǒng)開發(fā):軟件設(shè)計與優(yōu)化