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

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

>

NXP iMX8MM 通過(guò)本地服務(wù)器更新 BSP 鏡像

NXP iMX8MM 通過(guò)本地服務(wù)器更新 BSP 鏡像

1). 簡(jiǎn)介

嵌入式 ARM 平臺(tái)量產(chǎn) BSP 更新通常有多種方式,ARM SoC 供應(yīng)商或者板級(jí)模塊供應(yīng)商也通常會(huì)針對(duì)性提供一些工具軟件,比如 NXP 就提供了 mfgtools 工具。本文則基于 ARM 計(jì)算機(jī)模塊供應(yīng)商 Toradex 開發(fā)的 Toradex Easy Installer 工具來(lái)介紹通過(guò)本地部署服務(wù)器來(lái)進(jìn)行量產(chǎn) BSP 鏡像更新的方式。

 

本文所演示的平臺(tái)來(lái)自于 Toradex Verdin i.MX8MM 嵌入式平臺(tái)。

 

 

2. 準(zhǔn)備

a). Verdin i.MX8MM ARM核心版配合Dahlia 載板,并連接調(diào)試串口用于測(cè)試

 

b). Dahlia 載板通過(guò) DSI-HDMI 轉(zhuǎn)接卡連接 HDMI 顯示器。

 

 

3). Toradex Easy Installer 介紹

a). 包括本文使用的 Verdin i.MX8MM 在內(nèi),Toradex 計(jì)算機(jī)模塊出廠預(yù)裝 Toradex Easy Installer 工具,這個(gè)工具將 SoC 廠家提供的通過(guò)恢復(fù)模式更新 BSP 鏡像工具封裝到一個(gè)可視化易用的應(yīng)用內(nèi),方便客戶進(jìn)行工廠端批量量產(chǎn)更新,更多詳細(xì)介紹請(qǐng)見(jiàn)如下:

https://developer.toradex.cn/easy-installer/toradex-easy-installer/toradex-easy-installer-overview/

 

b). Toradex Easy Installer 詳細(xì)使用方法請(qǐng)見(jiàn)如下描述,其支持通過(guò)本地 SD 卡或者 盤以及本地服務(wù)器來(lái)進(jìn)行更新。因?yàn)槟承┣闆r下,客戶量產(chǎn)載板設(shè)計(jì)可能未引出 SD 卡以及 USB Host 接口,本文就著重演示通過(guò)本地服務(wù)器實(shí)現(xiàn) BSP 鏡像更新的方法。

https://developer.toradex.cn/easy-installer/toradex-easy-installer/toradex-easy-installer-detailed-manual/

 

 

4). 通過(guò)本地服務(wù)器更新 BSP 鏡像

a). 首先確保模塊當(dāng)前保持出廠預(yù)裝 Toradex Easy Installer 狀態(tài),且 Toradex Easy Installer 可以正常啟動(dòng)。

 

b). 本地服務(wù)器可以是原生安裝 Linux 系統(tǒng)的 PC 或者虛擬機(jī),如果是虛擬機(jī),請(qǐng)將網(wǎng)絡(luò)配置為橋接模式,且保證主機(jī)和虛擬機(jī)以及模塊設(shè)備都處于同一局域網(wǎng)網(wǎng)段中。本文中本地服務(wù)器安裝 Ubuntu Desktop 24.04。

 

c). 如果模塊設(shè)備和本地服務(wù)器處于同一局域網(wǎng),且局域網(wǎng)內(nèi)部已經(jīng)有 DHCP 服務(wù)器,那么本地服務(wù)器只需要安裝如下服務(wù)即可:

./ 首先安裝 Web 服務(wù)器應(yīng)用,常用的有 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 鏡像,本文使用從這里下載的預(yù)編譯好的 Yocto Linux 鏡像

-------------------------------

### create BSP image folder ###

$ sudo mkdir /var/www/html/verdin-imx8mm

### deploy BSP image ###

$ sudo tar xvf/Verdin-iMX8MM_Reference-Multimedia-Image-Tezi_7.4.0+build.10.tar

$ sudo cd /var/www/html/verdin-imx8mm

$ sudo cp/Verdin-iMX8MM_Reference-Multimedia-Image-Tezi_7.4.0+build.10/* .

$ 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

-------------------------------

 

./ 此時(shí),模塊啟動(dòng)加載 Toradex Easy Installer 后,參考這里說(shuō)明通過(guò)手動(dòng)方式添加如下 feed 即可發(fā)現(xiàn)需要安裝的 BSP 鏡像

-------------------------------

http:///image_list.json

-------------------------------

 

./ 但是,在實(shí)際量產(chǎn)中,手動(dòng)修改輸入 feed 方式操作起來(lái)效率不高且容易出錯(cuò),而從 Toradex Easy Installer 2.0 以及以上版本,已經(jīng)支持 zeroconf 技術(shù),可以實(shí)現(xiàn)讓本地服務(wù)器被 Toradex Easy Installer 自動(dòng)發(fā)現(xiàn),這樣就可以實(shí)現(xiàn)自動(dòng)安裝量產(chǎn) BSP 鏡像的任務(wù)

-------------------------------

### 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

 

  Custom Toradex Easy Installer Feed

  

    _tezi._tcp

    80

    name=Custom Toradex Easy Installer Feed

    path=/image_list.json

    enabled=1

    https=0

  

### restart service ###

$ systemctl restart avahi-daemon

-------------------------------

 

// 需要注意的是,tezi.service 文件中的 path 定義,是相對(duì)于 Web 服務(wù)器配置文件 /etc/lighttpd/lighttpd.conf 中 server.document-root=/var/www/html 定義的 root 目錄的相對(duì)路徑,而不是絕對(duì)路徑。

 

./ 此時(shí),模塊啟動(dòng)加載 Toradex Easy Installer 后,會(huì)自動(dòng)發(fā)現(xiàn)本地服務(wù)器并顯示需要安裝的 BSP 鏡像列表

 

 

./ 此時(shí),如果要進(jìn)一步實(shí)現(xiàn)發(fā)現(xiàn)本地服務(wù)器的 BSP 鏡像后即自動(dòng)安裝,則可以參考這里說(shuō)明,修改 Web 服務(wù)器部署的 BSP 鏡像中的 image.json 文件,使能自動(dòng)安裝

-------------------------------

### modify option ###

"autoinstall": false,

### remove license declaration ###

"license": "LA_OPT_NXP_SW.html",

-------------------------------

 

如果進(jìn)一步需要安裝完成后自動(dòng)重啟,則在 wrapup.sh 文件中增加如下內(nèi)容

-------------------------------

reboot -f

exit 0

-------------------------------

 

d). 如果模塊設(shè)備和本地服務(wù)器處于同一局域網(wǎng),但局域網(wǎng)內(nèi)部沒(méi)有 DHCP 服務(wù)器,或者模塊設(shè)備和本地服務(wù)器通過(guò)網(wǎng)線直連,那么本地服務(wù)器除了上述配置,還需要安裝 DHCP 服務(wù):

-------------------------------

### 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ù)器網(wǎng)段配置為 192.168.10.x 網(wǎng)段,是為了后續(xù)通過(guò) DHCP 加載 Toradex Easy Installer 啟動(dòng)做準(zhǔn)備,Toradex U-boot 中默認(rèn)設(shè)置的 serverip 變量是這個(gè)網(wǎng)段,這樣就無(wú)需修改 U-boot 環(huán)境變量。但如果沒(méi)有這個(gè)需求,那么可以隨意設(shè)置不沖突的網(wǎng)段即可。

 

./ 此時(shí),模塊啟動(dòng)加載 Toradex Easy Installer 后,會(huì)先通過(guò)配置的 DHCP 服務(wù)器獲取 IP 地址后,和上述同樣自動(dòng)發(fā)現(xiàn)本地服務(wù)器并顯示需要安裝的 BSP 鏡像列表,也可以同樣配置自動(dòng)安裝,這里不再贅述

 

 

5). 通過(guò)本地服務(wù)器先加載 Toradex Easy Installer 啟動(dòng)后再更新 BSP 鏡像

a). 當(dāng)模塊中出廠預(yù)裝的 Toradex Easy Installer 已經(jīng)被更新為 BSP 鏡像,在某些特殊情況下可能需要通過(guò)網(wǎng)絡(luò)方式重新加載 Toradex Easy Installer 啟動(dòng)后,再次更新新的 BSP 鏡像。比如部署設(shè)備的現(xiàn)場(chǎng)更新等。

 

b). 能夠?qū)崿F(xiàn)網(wǎng)絡(luò)加載 Toradex Easy Installer 的必要前提條件是當(dāng)前模塊 Bootloader 工作正常且支持通過(guò) DHCP 啟動(dòng),Toradex 提供的 Toradex Easy Installer 或者 Yocto Linux BSP 中的 U-boot 都默認(rèn)支持此功能,有現(xiàn)成的啟動(dòng)腳本可以直接使用。如果是其他 BSP 鏡像,則不一定直接支持。

 

c). 本地服務(wù)器參考如下安裝 tftp 服務(wù)來(lái)部署 Toradex Easy Installer 啟動(dòng)文件

-------------------------------

### 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 啟動(dòng)文件到 tftp root 目錄

./ 這里下載 Toradex Easy Installer 對(duì)應(yīng)硬件的鏡像文件

 

./ 解壓鏡像文件

-------------------------------

$ tar xvf Verdin-iMX8MM_ToradexEasyInstaller_7.4.0+build.8/

$ cd/Verdin-iMX8MM_ToradexEasyInstaller_7.4.0+build.8

$ 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

-------------------------------

 

./ 參考這里說(shuō)明,通過(guò) 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 文件以及鏡像中原來(lái)的 overlays.txt tezi.itb 三個(gè)文件復(fù)制到 tftp root 目錄

-------------------------------

$ cd/Verdin-iMX8MM_ToradexEasyInstaller_7.4.0+build.8/

$ cp boot.scr overlays.txt tezi.itb <$HOME>/tezi/tftp

-------------------------------

 

e). 通過(guò)模塊 U-boot 命令行或者 Linux 系統(tǒng)命令修改 U-boot 環(huán)境變量,使模塊默認(rèn)通過(guò) DHCP 來(lái)啟動(dòng)

./ 如果模塊設(shè)備和本地服務(wù)器處于同一局域網(wǎng),但局域網(wǎng)內(nèi)部沒(méi)有 DHCP 服務(wù)器,或者模塊設(shè)備和本地服務(wù)器通過(guò)網(wǎng)線直連,那么同樣需要按照上述說(shuō)明安裝 DHCP 服務(wù),已經(jīng)安裝使能好則無(wú)需重復(fù)配置。

 

./ 除非本地服務(wù)器配置為 U-boot 環(huán)境變量默認(rè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 ''

-------------------------------

 

./ 修改默認(rèn)啟動(dòng)方式

-------------------------------

### 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'

-------------------------------

 

./ 重新啟動(dòng)后,模塊自動(dòng)通過(guò) DHCP 從本地服務(wù)器 tftp 加載 Toradex Easy Installer 啟動(dòng)

-------------------------------

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). 此時(shí),模塊 Toradex Easy Installer 加載啟動(dòng)成功,如果上述章節(jié)4的相關(guān)服務(wù)也同時(shí)存在,則會(huì)繼續(xù)自動(dòng)識(shí)別本地服務(wù)器上需要燒寫的 BSP 鏡像,進(jìn)而實(shí)現(xiàn)自動(dòng)更新。

./ 在更新完成后,請(qǐng)務(wù)必恢復(fù)默認(rèn)啟動(dòng)選項(xiàng)

-------------------------------

### 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). 總結(jié)

本文基于 Verdin i.MX8MM 模塊平臺(tái)測(cè)試了通過(guò)本地服務(wù)器更新 BSP 鏡像的配置說(shuō)明。

審核編輯(
王靜
)

提交

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

查看更多

NXP iMX8MM ARM 平臺(tái) Weston RDP 遠(yuǎn)程桌面部署測(cè)試

基于 NXP iMX8MP 平臺(tái)測(cè)試 CODESYS TargetVisu

通過(guò) Docker 部署測(cè)試 CODESYS PLC示例

Yocto layer 使用 TI AM62 安全啟動(dòng)功能

定制 Linux Kernel Driver 編譯示例