NXP iMX8MM 通過本地服務器更新 BSP 鏡像
1). 簡介
嵌入式 ARM 平臺量產(chǎn) BSP 更新通常有多種方式,ARM SoC 供應商或者板級模塊供應商也通常會針對性提供一些工具軟件,比如 NXP 就提供了 mfgtools 工具。本文則基于 ARM 計算機模塊供應商 Toradex 開發(fā)的 Toradex Easy Installer 工具來介紹通過本地部署服務器來進行量產(chǎn) BSP 鏡像更新的方式。
本文所演示的平臺來自于 Toradex Verdin i.MX8MM 嵌入式平臺。
2. 準備
a). Verdin i.MX8MM ARM核心版配合Dahlia 載板,并連接調試串口用于測試。
b). Dahlia 載板通過 DSI-HDMI 轉接卡連接 HDMI 顯示器。
3). Toradex Easy Installer 介紹
a). 包括本文使用的 Verdin i.MX8MM 在內,Toradex 計算機模塊出廠預裝 Toradex Easy Installer 工具,這個工具將 SoC 廠家提供的通過恢復模式更新 BSP 鏡像工具封裝到一個可視化易用的應用內,方便客戶進行工廠端批量量產(chǎn)更新,更多詳細介紹請見如下:
https://developer.toradex.cn/easy-installer/toradex-easy-installer/toradex-easy-installer-overview/
b). Toradex Easy Installer 詳細使用方法請見如下描述,其支持通過本地 SD 卡或者 U 盤以及本地服務器來進行更新。因為某些情況下,客戶量產(chǎn)載板設計可能未引出 SD 卡以及 USB Host 接口,本文就著重演示通過本地服務器實現(xiàn) BSP 鏡像更新的方法。
https://developer.toradex.cn/easy-installer/toradex-easy-installer/toradex-easy-installer-detailed-manual/
4). 通過本地服務器更新 BSP 鏡像
a). 首先確保模塊當前保持出廠預裝 Toradex Easy Installer 狀態(tài),且 Toradex Easy Installer 可以正常啟動。
b). 本地服務器可以是原生安裝 Linux 系統(tǒng)的 PC 或者虛擬機,如果是虛擬機,請將網(wǎng)絡配置為橋接模式,且保證主機和虛擬機以及模塊設備都處于同一局域網(wǎng)網(wǎng)段中。本文中本地服務器安裝 Ubuntu Desktop 24.04。
c). 如果模塊設備和本地服務器處于同一局域網(wǎng),且局域網(wǎng)內部已經(jīng)有 DHCP 服務器,那么本地服務器只需要安裝如下服務即可:
./ 首先安裝 Web 服務器應用,常用的有 lighttpd 或者 nginx。本文示例使用 lighttpd,如果需要 nginx 可以參考這里
-------------------------------
### Install lighttpd ###
$ sudo apt install lighttpd
### create configuration file ###
# /var/www/html/image_list.json
{
"config_format": 1,
"images": [
"verdin-imx8mm/image.json"
]
}
-------------------------------
./ 部署需要安裝的 BSP 鏡像,本文使用從這里下載的預編譯好的 Yocto Linux 鏡像
-------------------------------
### create BSP image folder ###
$ sudo mkdir /var/www/html/verdin-imx8mm
### deploy BSP image ###
$ sudo tar xvf
$ sudo cd /var/www/html/verdin-imx8mm
$ sudo cp
$ tree -L 1 /var/www/html/verdin-imx8mm/
/var/www/html/verdin-imx8mm/
├── image.json
├── imx-boot
├── LA_OPT_NXP_SW.html
├── marketing.tar
├── prepare.sh
├── Reference-Multimedia-Image-verdin-imx8mm.bootfs.tar.xz
├── Reference-Multimedia-Image-verdin-imx8mm.tar.xz
├── toradexlinux.png
├── u-boot-initial-env-sd
└── wrapup.sh
### restart service ###
$ systemctl restart lighttpd
-------------------------------
./ 此時,模塊啟動加載 Toradex Easy Installer 后,參考這里說明通過手動方式添加如下 feed 即可發(fā)現(xiàn)需要安裝的 BSP 鏡像
-------------------------------
http://
-------------------------------
./ 但是,在實際量產(chǎn)中,手動修改輸入 feed 方式操作起來效率不高且容易出錯,而從 Toradex Easy Installer 2.0 以及以上版本,已經(jīng)支持 zeroconf 技術,可以實現(xiàn)讓本地服務器被 Toradex Easy Installer 自動發(fā)現(xiàn),這樣就可以實現(xiàn)自動安裝量產(chǎn) BSP 鏡像的任務
-------------------------------
### Install zeroconf related package ###
$ sudo apt install avahi-daemon avahi-discover avahi-utils libnss-mdns mdns-scan
### create configuration file ###
# /etc/avahi/services/tezi.service
### restart service ###
$ systemctl restart avahi-daemon
-------------------------------
// 需要注意的是,tezi.service 文件中的 path 定義,是相對于 Web 服務器配置文件 /etc/lighttpd/lighttpd.conf 中 server.document-root=”/var/www/html” 定義的 root 目錄的相對路徑,而不是絕對路徑。
./ 此時,模塊啟動加載 Toradex Easy Installer 后,會自動發(fā)現(xiàn)本地服務器并顯示需要安裝的 BSP 鏡像列表
./ 此時,如果要進一步實現(xiàn)發(fā)現(xiàn)本地服務器的 BSP 鏡像后即自動安裝,則可以參考這里說明,修改 Web 服務器部署的 BSP 鏡像中的 image.json 文件,使能自動安裝
-------------------------------
### modify option ###
"autoinstall": false,
### remove license declaration ###
"license": "LA_OPT_NXP_SW.html",
-------------------------------
如果進一步需要安裝完成后自動重啟,則在 wrapup.sh 文件中增加如下內容
-------------------------------
reboot -f
exit 0
-------------------------------
d). 如果模塊設備和本地服務器處于同一局域網(wǎng),但局域網(wǎng)內部沒有 DHCP 服務器,或者模塊設備和本地服務器通過網(wǎng)線直連,那么本地服務器除了上述配置,還需要安裝 DHCP 服務:
-------------------------------
### Install DHCP server ###
sudo apt install isc-dhcp-server
### modify configuration file ###
# /etc/dhcp/dhcpd.conf
...
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.100 192.168.1.200;
}
### start DHCP service ###
$ systemctl start isc-dhcp-server
-------------------------------
// 這里將 DHCP 服務器網(wǎng)段配置為 192.168.10.x 網(wǎng)段,是為了后續(xù)通過 DHCP 加載 Toradex Easy Installer 啟動做準備,Toradex U-boot 中默認設置的 serverip 變量是這個網(wǎng)段,這樣就無需修改 U-boot 環(huán)境變量。但如果沒有這個需求,那么可以隨意設置不沖突的網(wǎng)段即可。
./ 此時,模塊啟動加載 Toradex Easy Installer 后,會先通過配置的 DHCP 服務器獲取 IP 地址后,和上述同樣自動發(fā)現(xiàn)本地服務器并顯示需要安裝的 BSP 鏡像列表,也可以同樣配置自動安裝,這里不再贅述
5). 通過本地服務器先加載 Toradex Easy Installer 啟動后再更新 BSP 鏡像
a). 當模塊中出廠預裝的 Toradex Easy Installer 已經(jīng)被更新為 BSP 鏡像,在某些特殊情況下可能需要通過網(wǎng)絡方式重新加載 Toradex Easy Installer 啟動后,再次更新新的 BSP 鏡像。比如部署設備的現(xiàn)場更新等。
b). 能夠實現(xiàn)網(wǎng)絡加載 Toradex Easy Installer 的必要前提條件是當前模塊 Bootloader 工作正常且支持通過 DHCP 啟動,Toradex 提供的 Toradex Easy Installer 或者 Yocto Linux BSP 中的 U-boot 都默認支持此功能,有現(xiàn)成的啟動腳本可以直接使用。如果是其他 BSP 鏡像,則不一定直接支持。
c). 本地服務器參考如下安裝 tftp 服務來部署 Toradex Easy Installer 啟動文件
-------------------------------
### Install tftp service ###
$ sudo apt install tftpd-hpa
### create tftp root folder ###
$ make dir <$HOME>/tezi/tftp
### modify configuration file ###
# /etc/default/tftpd-hpa
TFTP_DIRECTORY="<$HOME>/tezi/tftp"
### restart service ###
$ systemctl restart tftpd-hpa
-------------------------------
d). 部署 Toradex Easy Installer 啟動文件到 tftp root 目錄
./ 從這里下載 Toradex Easy Installer 對應硬件的鏡像文件
./ 解壓鏡像文件
-------------------------------
$ tar xvf Verdin-iMX8MM_ToradexEasyInstaller_7.4.0+build.8/
$ cd
$ tree -L 1
.
├── boot.scr
├── image.json
├── imx-boot-recoverytezi
├── imx-boot-sd
├── overlays.txt
├── recovery
├── recovery-linux.README
├── recovery-linux.sh
├── recovery-windows.bat
├── recovery-windows.README
├── tezi.itb
├── tezi.png
└── wrapup.sh
-------------------------------
./ 參考這里說明,通過 boot.scr 文件生成 boot.cmd 文件,并如下修改后重新編譯生成 boot.scr 文件
-------------------------------
### boot.cmd ###
## comment below line ##
# env set bootcmd_tezi '${load_cmd} ${fitimage_addr} ${tezi_image}'
## replace with below line ##
env set bootcmd_tezi 'tftp ${fitimage_addr} ${tezi_image}'
### compile ###
$ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Distro Boot Script" -d boot.cmd boot.scr
-------------------------------
./ 將修改的 boot.scr 文件以及鏡像中原來的 overlays.txt tezi.itb 三個文件復制到 tftp root 目錄
-------------------------------
$ cd
$ cp boot.scr overlays.txt tezi.itb <$HOME>/tezi/tftp
-------------------------------
e). 通過模塊 U-boot 命令行或者 Linux 系統(tǒng)命令修改 U-boot 環(huán)境變量,使模塊默認通過 DHCP 來啟動
./ 如果模塊設備和本地服務器處于同一局域網(wǎng),但局域網(wǎng)內部沒有 DHCP 服務器,或者模塊設備和本地服務器通過網(wǎng)線直連,那么同樣需要按照上述說明安裝 DHCP 服務,已經(jīng)安裝使能好則無需重復配置。
./ 除非本地服務器配置為 U-boot 環(huán)境變量默認的 192.168.10.1 IP 地址,否則需要先修改
-------------------------------
### U-Boot prompt ###
Verdin iMX8MM # setenv serverip '
Verdin iMX8MM # saveenv
### Linux prompt ###
root@verdin-imx8mm-07276322:~# fw_setenv serverip '
-------------------------------
./ 修改默認啟動方式
-------------------------------
### U-Boot prompt ###
Verdin iMX8MM # setenv bootcmd 'run bootcmd_dhcp'
Verdin iMX8MM # saveenv
### Linux prompt ###
root@verdin-imx8mm-07276322:~# fw_setenv bootcmd 'run bootcmd_dhcp'
-------------------------------
./ 重新啟動后,模塊自動通過 DHCP 從本地服務器 tftp 加載 Toradex Easy Installer 啟動
-------------------------------
U-Boot 2022.04-6.8.0+git.a1eb18d157f4 (Jul 16 2024 - 20:38:08 +0000)
CPU: i.MX8MMQ rev1.0 1600 MHz (running at 1200 MHz)
CPU: Industrial temperature grade (-40C to 105C) at 53C
Reset cause: POR
DRAM: 2 GiB
Core: 114 devices, 21 uclasses, devicetree: separate
WDT: Started watchdog@30280000 with servicing (60s timeout)
MMC: FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
Loading Environment from MMC... OK
...
DHCP client bound to address 192.168.10.102 (1765 ms)
Using ethernet@30be0000 device
TFTP from server 192.168.10.1; our IP address is 192.168.10.102
Filename 'boot.scr'.
Load address: 0x50280000
Loading: #
288.1 KiB/s
done
...
TFTP from server 192.168.10.1; our IP address is 192.168.10.102
Filename 'tezi.itb'.
Load address: 0x44200000
Loading: #################################################################
#################################################################
...
Bootargs: quiet video=HDMI-A-1:1280x720@60D rootfstype=squashfs root=/dev/ram autoinstall
## Loading kernel from FIT Image at 44200000 ...
Using 'conf-freescale_imx8mm-verdin-wifi-dev.dtb' configuration
...
Toradex Easy Installer 7.4.0+build.8 ()
...
Welcome to the Toradex Easy Installer
...
Check our documentation at:
https://developer.toradex.com/software/toradex-easy-installer
~ #
-------------------------------
f). 此時,模塊 Toradex Easy Installer 加載啟動成功,如果上述章節(jié)4的相關服務也同時存在,則會繼續(xù)自動識別本地服務器上需要燒寫的 BSP 鏡像,進而實現(xiàn)自動更新。
./ 在更新完成后,請務必恢復默認啟動選項
-------------------------------
### U-Boot prompt ###
Verdin iMX8MM # setenv bootcmd 'run distro_bootcmd'
Verdin iMX8MM # saveenv
### Linux prompt ###
root@verdin-imx8mm-07276322:~# fw_setenv bootcmd 'run distro_bootcmd'
-------------------------------
6). 總結
本文基于 Verdin i.MX8MM 模塊平臺測試了通過本地服務器更新 BSP 鏡像的配置說明。
提交
NXP iMX8MM ARM 平臺 Weston RDP 遠程桌面部署測試
基于 NXP iMX8MP 平臺測試 CODESYS TargetVisu
通過 Docker 部署測試 CODESYS PLC示例
Yocto layer 使用 TI AM62 安全啟動功能
定制 Linux Kernel Driver 編譯示例


投訴建議