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 ITARM核心版配合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.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>

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

./ 将上述准备好的外部存储介质连接到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

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 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容