天天看點

NXP iMX8 ARM平台Distro Boot使用

By Toradex秦海

1). 簡介

ARM嵌入式平台由于其分散性,不同SoC廠商通常都采用互不相同的方式來引導啟動系統,這就導緻了針對嵌入式ARM平台的系統發行版本也需要根據不同硬體SoC平台進行針對性定制,而不像X86平台(如BIOS或UEFI)或者64-bit ARM伺服器平台(如SBSA或SBBR)這樣采用标準化的啟動引導流程,是以通用桌面級系統發行版本比如SUSE、Redhat或Fedora就很難持續穩定的支援各種嵌入式ARM平台,反而趨勢是各個硬體供應商自己定制釋出針對自己硬體的系統釋出版本(如Raspbian,Bananian,Parabuntu)來綁定使用者。

Distro Boot的标準名稱是Generic Distro Configuration Concept,項目由U-boot開發者始于2014年左右,目标就是試圖用一個标準方法去引導啟動不同硬體平台。當在U-boot中打開Distro Boot支援後,隻需要将任意支援的系統釋出版本鏡像檔案和一個符合Distro Boot定義的啟動配置檔案放置于一個分區的可移動裝置即可引導裝置啟動進入系統。

本文就基于NXP最新的iMX8 SoC(基于Cortex-A72+A53和Coretex-M4架構)ARM平台來測試使用Distro Boot機制來引導系統鏡像。示範平台來自于Toradex 基于iMX8QM的Apalis 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-boot(Distro 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 Installer是Toradex提供的一個基于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/<external_storage_mount_point>

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

./ 将上述準備好的外部存儲媒體連接配接到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盤,本文測試使用一個16GB的Mciro SD卡

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

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

Disk /dev/sdc:14.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 iMX8的Ycoto 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、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 插槽,啟動子產品,進入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

[email protected]:~# 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版本息息相關,是以本文測試僅限于目前測試平台和版本,不代表未來軟體發生變化後相關功能還一定确認完整。

參考文獻

Linux - Distro Boot

Boot From an SD Card / USB Stick / SATA drive

Boot from a TFTP/NFS Server