热度 6
2021-9-13 10:24
2392 次阅读|
0 个评论
B y Toradex 秦海 1). 简介 ARM 嵌入式平台由于其分散性,不同 SoC 厂商通常都采用互不相同的方式来引导启动系统,这就导致了针对嵌入式 ARM 平台的系统发行版本也需要根据不同硬件 SoC 平台进行针对性定制,而不像 X 86 平台(如 BIOS 或 UEFI )或者 6 4 -bit ARM 服务器平台(如 SBSA 或 SBBR )这样采用标准化的启动引导流程,因此通用桌面级系统发行版本比如 SUSE 、 Redhat 或 Fedora 就很难持续稳定的支持各种嵌入式 ARM 平台,反而趋势是各个硬件供应商自己定制发布针对自己硬件的系统发布版本(如 Raspbian , Bananian , Parabuntu )来绑定用户。 Distro Boot 的标准名称是 Generic Distro Configuration Concept ,项目由 U-boot 开发者始于 2 014 年左右,目标就是试图用一个标准方法去引导启动不同硬件平台。当在 U-boot 中打开 Distro Boot 支持后,只需要将任意支持的系统发布版本镜像文件和一个 符合 Distro Boot 定义的启动配置文件放置于一个分区的可移动设备即可引导设备启动进入系统。 本文就基于 NXP 最新的 iMX 8 SoC (基于 Cortex-A 72 + A53 和 Coretex -M4 架构) ARM 平台来测试使用 Distro Boot 机制来引导系统镜像。演示平台来自于 Toradex 基于 iMX 8 QM 的 Apalis iMX 8 QM ARM 嵌入式模块平台。 需要注意的是,由于不同 U-boot/Linux kernel 版本的兼容性以及 iMX8 ARM 处理器增加的底层 SECO/SCFW 固件的存在,可能导致本文测试的内容在其他 BSP 版本上面无法正常工作,本文仅基于当前测试环境进行 distro boot 的功能演示参考。 2 ) . 准备 a). Apalis iMX8QM 4 GB WB IT ARM 核心版配合 Ioxra 载板 ,连接调试串口 UART1 (载板 X2 2 )到开发主机方便调试。 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/ ------------------------------------ ./ 将上述准备好的外部存储介质连接到 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' && saveen v ------------------------------------ 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 iMX 8 平台通过 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