工控網首頁
>

應用設計

>

NXP iMX8 ARM平臺Distro Boot使用

NXP iMX8 ARM平臺Distro Boot使用

1). 簡介

ARM嵌入式平臺由于其分散性,不同SoC廠商通常都采用互不相同的方式來引導啟動系統,這就導致了針對嵌入式ARM平臺的系統發行版本也需要根據不同硬件SoC平臺進行針對性定制,而不像X86平臺(如BIOSUEFI)或者64-bit ARM服務器平臺(如SBSASBBR)這樣采用標準化的啟動引導流程,因此通用桌面級系統發行版本比如SUSE、RedhatFedora就很難持續穩定的支持各種嵌入式ARM平臺,反而趨勢是各個硬件供應商自己定制發布針對自己硬件的系統發布版本(如Raspbian,Bananian,Parabuntu)來綁定用戶。

 

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

 

本文就基于NXP最新的iMX8 SoC(基于Cortex-A72+A53Coretex-M4架構)ARM平臺來測試使用Distro Boot機制來引導系統鏡像。演示平臺來自于Toradex 基于iMX8QMApalis iMX8QM ARM嵌入式模塊平臺。

 

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

 

 

2). 準備

a). Apalis iMX8QM 4GB WB IT ARM核心版配合Ioxra 載板,連接調試串口UART1(載板X22)到開發主機方便調試。

 

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

 

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

 

 

3). Distro boot啟動順序

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

./ 外部SD卡設備

./ 內部eMMC存儲設備

./ 外部USB存儲設備

./ 外部網絡設備

 

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

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

### 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). 通過外部存儲介質加載Toradex Easy Installer測試

a). Toradex Easy InstallerToradex提供的一個基于Linux/QT開發的圖形界面工具,用于將不同類型的操作系統方便直觀的安裝到Toradex計算機模塊的內部eMMC存儲上面。

 

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

 

c). 測試流程

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

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

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

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

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

$ ls

boot-tezi.scr  image.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/

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

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

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

### external SD storage depending on corresponding SD slot

# run bootcmd_mmc1 or run bootcmd_mmc2

 

### external USB stick

# run bootcmd_usb0

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

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

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

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

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

 

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

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

 

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

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

Disk /dev/sdc14.9 GiB,15931539456 字節,31116288 個扇區

單元:扇區 / 1 * 512 = 512 字節

扇區大小(邏輯/物理)512 字節 / 512 字節

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

磁盤標簽類型:dos

磁盤標識符:0x8a42d42a

 

設備       啟動    起點     末尾     扇區  大小 Id 類型

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

/dev/sdc2       8390656 31116287 22725632 10.9G 83 Linux

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

 

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

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

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

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

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

 

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

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

### 解壓縮image

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

### 解壓縮 bootfs、rootfsSD

$ 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 插槽,啟動模塊,進入uboot命令行,執行下面命令通過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). 類似的思路,也可以通過創建TFTP/NFS 服務器實現網絡啟動,具體可以參考這里說明。

 

 

6). 總結

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

 

 

參考文獻

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 

審核編輯(
王靜
)
投訴建議

評論

查看更多評論
其他資訊

查看更多

NXP iMX8X M4核心SPI開發

NXP iMX8系列處理器核心性能對比測試

如何基于iMX8M Plus開發機器學習應用

iMX8MPlus和iMX8QM機器學習框架eIQ性能對比

NXP iMX8 SCFW和Boot Container Image編譯