IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> NXP iMX8 ARM平台Distro Boot使用 -> 正文阅读

[嵌入式]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

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版本息息相关,因此本文测试仅限于当前测试平台和版本,不代表未来软件发生变化后相关功能还一定确认完整。

参考文献

Linux - Distro Boot

Boot From an SD Card / USB Stick / SATA drive

Boot from a TFTP/NFS Server

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:30:52  更:2021-09-14 13:33:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:24:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码