NXP iMX8 ARM平臺Distro Boot使用

By Toradex秦海

1). 簡介

ARM嵌入式平臺由于其分散性,不同SoC廠商通常都采用互不相同的方式來引導(dǎo)啟動系統(tǒng),這就導(dǎo)致了針對嵌入式ARM平臺的系統(tǒng)發(fā)行版本也需要根據(jù)不同硬件SoC平臺進(jìn)行針對性定制,而不像X86平臺(如BIOS或UEFI)或者64-bit?ARM服務(wù)器平臺(如SBSA或SBBR)這樣采用標(biāo)準(zhǔn)化的啟動引導(dǎo)流程,因此通用桌面級系統(tǒng)發(fā)行版本比如SUSE、Redhat或Fedora就很難持續(xù)穩(wěn)定的支持各種嵌入式ARM平臺,反而趨勢是各個硬件供應(yīng)商自己定制發(fā)布針對自己硬件的系統(tǒng)發(fā)布版本(如Raspbian,Bananian,Parabuntu)來綁定用戶。


Distro?Boot的標(biāo)準(zhǔn)名稱是Generic Distro Configuration Concept,項目由U-boot開發(fā)者始于2014年左右,目標(biāo)就是試圖用一個標(biāo)準(zhǔn)方法去引導(dǎo)啟動不同硬件平臺。當(dāng)在U-boot中打開Distro?Boot支持后,只需要將任意支持的系統(tǒng)發(fā)布版本鏡像文件和一個符合Distro?Boot定義的啟動配置文件放置于一個分區(qū)的可移動設(shè)備即可引導(dǎo)設(shè)備啟動進(jìn)入系統(tǒng)。


本文就基于NXP最新的iMX8 SoC(基于Cortex-A72+A53和Coretex-M4架構(gòu))ARM平臺來測試使用Distro?Boot機(jī)制來引導(dǎo)系統(tǒng)鏡像。演示平臺來自于Toradex 基于iMX8QM的Apalis?iMX8QM?ARM嵌入式模塊平臺。


需要注意的是,由于不同U-boot/Linux kernel版本的兼容性以及iMX8 ARM處理器增加的底層SECO/SCFW固件的存在,可能導(dǎo)致本文測試的內(nèi)容在其他BSP版本上面無法正常工作,本文僅基于當(dāng)前測試環(huán)境進(jìn)行distro boot的功能演示參考。



2). 準(zhǔn)備

a). Apalis iMX8QM?4GB?WB ITARM核心版配合Ioxra載板,連接調(diào)試串口UART1(載板X22)到開發(fā)主機(jī)方便調(diào)試。


b). 參考這里更新Toradex Ycoto Linux BSP V5.3版本BSP image,BSP中包含的U-boot默認(rèn)以及支持Distro boot。


c). 需要通過U-boot distro boot啟動的BSP image,需要包含一個啟動配置文件,通常為extlinux.conf或者U-boot專用的boot.scr/boot.scr.uimg文件,關(guān)于配置文件的說明請參考這里。



3). Distro boot啟動順序

a). 默認(rèn)情況下,U-boot(Distro boot 支持)會按照如下順序掃描啟動配置文件extlinux.conf或者boot.scr/boot.scr.uimg

./ 外部SD卡設(shè)備

./ 內(nèi)部eMMC存儲設(shè)備

./ 外部USB存儲設(shè)備

./ 外部網(wǎng)絡(luò)設(shè)備


b). 默認(rèn)掃描順序和掃描位置由如下U-boot環(huán)境變量決定,如有需要可以自行修改

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

### default boot devices sequence

boot_targets=mmc1 mmc2 mmc0 usb0 dhcp


### boot partition scanning location

boot_prefixes=/ /boot/

boot_script_dhcp=boot.scr

boot_scripts=boot.scr

boot_syslinux_conf=extlinux/extlinux.conf

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



4). 通過外部存儲介質(zhì)加載Toradex Easy Installer測試

a). Toradex Easy Installer是Toradex提供的一個基于Linux/QT開發(fā)的圖形界面工具,用于將不同類型的操作系統(tǒng)方便直觀的安裝到Toradex計算機(jī)模塊的內(nèi)部eMMC存儲上面。


b). 在更新了Linux BSP之后,Toradex Easy Installer即被擦除,如果想重新更新Linux或者其他操作系統(tǒng),就需要重新將Toradex easy installer加載運(yùn)行,官方支持的方式是參考這里通過恢復(fù)模式操作,而基于當(dāng)前Toradex Easy Installer V5.3版本配合Ycoto Linux V5.x版本,可以實現(xiàn)通過外部存儲介質(zhì)(SD卡或者U盤)在U-boot環(huán)境下直接加載Toradex Easy Installer運(yùn)行而無需配置恢復(fù)模式。


c). 測試流程

./ 從這里下載對應(yīng)Apalis iMX8模塊的Toradex Easy Installer V5.3版本image 壓縮包

./ 解壓壓縮包,可以看到里面以及包含distro boot所需要的啟動文件 boot-tezi.scr,將其更名為 boot.scr。然后將文件復(fù)制到外部存儲介質(zhì) / 目錄或者 /boot 目錄。

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

$ unzip Apalis-iMX8_ToradexEasyInstaller_5.3.0+build.3.zip

$ cd Apalis-iMX8_ToradexEasyInstaller_5.3.0+build.3/

$ ls

boot-tezi.scrimage.json ?overlays.txt ?recovery-linux.sh ????tezi.itb ?u-boot.bin

hdmitxfw.bin ??imx-boot ???recovery ?????recovery-windows.bat ?tezi.png ?wrapup.sh

$ mv boot-tezi.scr boot.scr

$ cp *?/media/simon/<external_storage_mount_point>

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

./ 將上述準(zhǔn)備好的外部存儲介質(zhì)連接到Ixora載板對應(yīng)接口,Apalis iMX8 開機(jī)從調(diào)試串口進(jìn)入U-boot命令行,執(zhí)行下面命令啟動外部存儲介質(zhì)的Toradex Easy Installer,啟動后即可從調(diào)試串口看到啟動信息,以及連接的顯示器看到Toradex Easy Installer應(yīng)用界面。

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

### external SD storage depending on corresponding SD slot

# run bootcmd_mmc1 or run bootcmd_mmc2


### external USB stick

# run bootcmd_usb0

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

./ 如上述章節(jié)3描述的默認(rèn)啟動掃描順序,如果是外部SD卡則即使不中斷或改動U-boot的啟動,只要具備boot.scr文件的SD卡設(shè)備插入,就會優(yōu)先從外部SD卡啟動,而對于U盤,如果需要自動啟動,則需要修改U-boot環(huán)境變量,將USB設(shè)備掃描順序提前。

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

# setenv boot_targets 'usb0 mmc1 mmc2 mmc0 dhcp' && saveenv

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


5). 通過外部存儲介質(zhì)加載Ycoto Linux BSP測試

a). 首先準(zhǔn)備一個足夠容量的SD卡或者U盤,本文測試使用一個16GB的Mciro SD卡


b). 在Ubuntu PC下通過fdisk 命令在目標(biāo)SD卡上面制作如下兩個分區(qū)

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

Disk /dev/sdc:14.9 GiB,15931539456 字節(jié),31116288 個扇區(qū)

單元:扇區(qū)/ 1 * 512 = 512 字節(jié)

扇區(qū)大小(邏輯/物理):512 字節(jié) / 512 字節(jié)

I/O 大小(最小/最佳):512 字節(jié) / 512 字節(jié)

磁盤標(biāo)簽類型:dos

磁盤標(biāo)識符:0x8a42d42a


設(shè)備啟動起點末尾扇區(qū)大小Id 類型

/dev/sdc1 ?????????2048 ?8390655 ?8388608 ???4G ?c W95 FAT32 (LBA)

/dev/sdc2 ??????8390656 31116287 22725632 10.9G 83 Linux

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


c). 然后通過如下命令分別格式化兩個分區(qū),F(xiàn)AT32分區(qū)用于存放kernel、device tree等基本boot文件,linux ext3分區(qū)用于存放rootfs文件

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

$ sudo mkfs.vfat -F 32 -n boot /dev/sdc1

$ sudo mkfs.ext3 -L rootfs /dev/sdc2

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


d). 從這里下載適用于Apalis iMX8的Ycoto Linux Multimedia Demo image,然后解壓,并分別將Image里面的boot文件和rootfs解壓到剛才制作好的SD卡兩個分區(qū)。Image boot文件中已經(jīng)包含了boot.scr文件,無需手動創(chuàng)建。

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

### 解壓縮image

$ tar xvf Apalis-iMX8_Reference-Multimedia-Image-Tezi_5.3.0+build.10.tar

### 解壓縮 bootfs、rootfs到SD卡

$ cd Apalis-iMX8_Reference-Multimedia-Image-Tezi_5.3.0+build.10/

$ sudo tar xf Reference-Multimedia-Image-apalis-imx8.bootfs.tar.xz ?--no-same-owner -C /media/simon/boot/

$ sudo tar xf Reference-Multimedia-Image-apalis-imx8.tar.xz -C /media/simon/rootfs/

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


e). 制作完成后將SD卡插入Ixora載板X10 插槽,啟動模塊,進(jìn)入uboot命令行,執(zhí)行下面命令通過SD卡啟動

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

### U-boot boot command from external SD cark

Apalis iMX8 # run bootcmd_mmc1

...

### agter booting, check current boot device is indeed external SD devcie - /dev/mmcblk1

root@apalis-imx8:~# df -h

Filesystem ?????Size ?Used Avail Use% Mounted on

/dev/root ???????11G ?1.1G ?9.1G ?11% /

devtmpfs ???????1.4G ?4.0K ?1.4G ??1% /dev

tmpfs ??????????1.9G ????0 ?1.9G ??0% /dev/shm

tmpfs ??????????1.9G ?6.6M ?1.9G ??1% /run

tmpfs ??????????1.9G ????0 ?1.9G ??0% /sys/fs/cgroup

tmpfs ??????????1.9G ?844K ?1.9G ??1% /tmp

tmpfs ??????????1.9G ??24K ?1.9G ??1% /var/volatile

/dev/mmcblk0p1 ??48M ??11M ??37M ?23% /media/mmcblk0p1

/dev/mmcblk0p2 ??15G ?1.1G ??13G ??8% /media/mmcblk0p2

/dev/mmcblk1p1 ?4.0G ??11M ?4.0G ??1% /boot

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


f). 另外,如果需要定制boot流程,可以參考這里說明修改boot.scr 文件。

G). 類似的思路,也可以通過創(chuàng)建TFTP/NFS 服務(wù)器實現(xiàn)網(wǎng)絡(luò)啟動,具體可以參考這里說明。



6). 總結(jié)

本文測試了基于NXP?iMX8平臺通過Distro Boot功能實現(xiàn)通過外部存儲設(shè)備啟動的方案,另外也可以延申到TFTP/NFS網(wǎng)絡(luò)啟動。不過由于Distro Boot功能兼容性和底層firmware以及uboot/kernel版本息息相關(guān),因此本文測試僅限于當(dāng)前測試平臺和版本,不代表未來軟件發(fā)生變化后相關(guān)功能還一定確認(rèn)完整。



參考文獻(xiàn)

https://developer.toradex.cn/knowledge-base/distro-boot-linux

https://developer.toradex.cn/knowledge-base/boot-from-sd-usb-sata

https://developer.toradex.cn/knowledge-base/boot-from-a-tftpnfs-server?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容