
本文档主要演示Linux系统启动卡制作,以及将Linux系统镜像固化至eMMC的方法,旨在帮助开发者和测试人员快速完成产品方案验证与性能评估中的系统固化环节。
Windows开发环境:Windows10 64bit
Linux开发环境:VMware16.2.5、Ubuntu22.04.4 64bit
LinuxSDK:LinuxSDK-[版本号](基于SDK_2025.1)
评估板系统版本:U-Boot-2021.01、Linux-6.1.111、Buildroot-2022.02
为便于阅读,下表对文档出现的关键术语进行解释;对于广泛认同释义的术语,在此不做注释。

(1)无特殊说明情况下,默认使用USB TO UART1接口作为调试串口,通过路由器与PC机进行网络连接。
(2)评估板出厂时可能未固化最新系统镜像至eMMC存储。为确保您体验到我司提供的最新系统功能,建议您参考本文档,按照指引将最新系统镜像固化至eMMC。
产品资料“4-软件资料\Linux\Makesdboot\”目录下的mksdboot_AA_BB_CC_DD.tar.gz压缩文件是Linux系统启动卡制卡工具包,主要包含FSBL、U-Boot、Linux内核镜像文件,以及文件系统压缩包等内容。AA_BB_CC_DD为制卡工具包的版本号,具体版本说明如下:
(1)AA:FSBL发布版本。详细信息请查看“4-软件资料\Linux\FSBL\”目录下的特性支持说明文件。
(2)BB:U-Boot发布版本。详细信息请查看“4-软件资料\Linux\U-Boot\”目录下的特性支持说明文件。
(3)CC:Linux内核发布版本。详细信息请查看“4-软件资料\Linux\Kernel\”目录下的特性支持说明文件。
(4)DD:文件系统发布版本。详细信息请查看“4-软件资料\Linux\Filesystem\”目录下的特性支持说明文件。
打开Ubuntu,将制卡工具包拷贝至“/home/tronlong/DR1/”工作目录下,进入制卡工具包所在路径,执行如下命令将其解压至当前目录。工具包名称需根据实际情况修改。
Host# cd /home/tronlong/DR1/
Host# tar -xf mksdboot_10_10_10_10.tar.gz

执行如下命令,查看解压后的制卡工具包具体内容。
Host# tree -L 5 mksdboot_10_10_10_10

(1)boot目录
(2)filesystem目录
(3)mksdboot.sh文件:Linux系统启动卡制作脚本文件。
评估板出厂时,默认提供一张配套的Micro SD卡,此卡为可正常使用的Linux系统启动卡。本章节主要说明Linux系统启动卡的制作方法,可使用配套的Linux系统启动卡,或者使用新的空白Micro SD卡。如下步骤使用配套的Linux系统启动卡进行操作,如使用空白Micro SD卡,步骤类似。
将Micro SD卡通过读卡器连接至PC机,Ubuntu系统识别后,一般会自动挂载Micro SD卡分区,如下所示。

若Ubuntu系统未自动识别,请右击右下角的USB大容量存储设备图标,再点击“Connect (Disconnect from Host)”进行识别。

如无以上图标或者连接不成功,请尝试如下方法:
(1)请将Micro SD卡通过读卡器插至PC机USB2.0接口,而不是USB3.0接口,部分版本VMware可能不兼容USB3.0。
(2)请将Micro SD卡通过读卡器插至PC机USB2.0接口,然后重启Ubuntu,在Ubuntu重启过程中不要取出。Ubuntu系统重启后,存储设备图标会重新出现。
执行如下命令,确认Micro SD卡在Ubuntu系统的设备节点名。
Host# sudo fdisk -l

可看到Micro SD卡设备节点是"/dev/sdb",并且有三个分区,分别为sdb1、sdb2和sdb3分区。设备节点名字是可变的,一般插拔多次或者使用不同的卡插拔后,可能会显示sdc或者sdd。
PV(Pipe Viewer)是一种基于终端的工具,用于通过管道监测数据的进度。
为了更直观地显示系统启动卡的制作进度,Linux系统启动卡制作过程中会使用PV工具。请执行如下命令通过网络安装PV工具,如未安装PV工具将会导致系统启动卡制作失败。
Host# sudo apt-get install pv

如下为Linux系统启动卡制作命令。命令中"/dev/sdb"为Micro SD卡设备节点,如错误输入其他存储介质设备节点,将会造成存储介质数据损坏,请确认命令中设备节点无误后,再执行命令。
进入制卡工具包目录,执行如下命令。
Host# sudo ./mksdboot.sh -d /dev/sdb

根据提示按回车键,进行Linux系统启动卡制作。

耗时约2min,Linux系统启动卡制作完成。同时,系统会打印提示信息,如下所示。制作时间与Linux系统大小、Micro SD卡容量和接口性能有关。

可看到新制作的Linux系统启动卡共有BOOT、rootfs和rootfs-backup三个分区。其中BOOT分区为FAT32格式,rootfs分区和rootfs-backup分区为EXT4格式。FAT32格式分区在Windows系统下可见,EXT4格式分区在Windows系统下不可见,三个分区在Linux系统下均可见。

(1)BOOT分区:主要存放BOOT.bin等文件,从制卡工具包boot目录拷贝而来。使用Linux系统启动卡启动系统时,将使用此目录的BO0T.bin文件启动FSBL和U-Boot。
(2)rootfs分区:存放文件系统。rootfs分区boot目录主要存放内核镜像、基础设备树文件等,从制卡工具包"filesystem/boot/"目录拷贝而来。使用Linux系统启动卡启动系统时,将使用此目录的kernel.bin、dtb.bin文件启动内核。
(3)rootfs-backup分区:存放备份的文件系统。系统固化时,将其内容固化至eMMC文件系统分区。

评估板断电,将Linux系统启动卡插入评估板Micro SD卡槽,根据评估底板丝印将启动方式选择拨码开关拨为011(1~3),此档位为Micro SD启动模式。使用Type-C线连接评估板的USB TO UART1调试串口至PC机,然后将评估板上电启动,串口调试终端会打印如下类似启动信息。

系统启动后会自动登陆root用户,说明使用Linux系统启动卡启动评估板成功。

本小节介绍Linux系统固化过程,固化过程包含固化FSBL、U-Boot、内核、设备树、文件系统至eMMC。
Linux系统启动卡制作时,已将固化系统的脚本文件mkemmcboot.sh拷贝至Linux系统启动卡文件系统的“/opt/tools/”目录下。
Target# ls /opt/tools/mkemmcboot.sh

执行如下命令进行一键固化,用时约2min后固化Linux系统至eMMC,同时串口调试终端打印提示信息。
Target# /opt/tools/mkemmcboot.sh

脚本会进行如下操作:
(1)清除U-Boot环境变量。
(2)将eMMC格式化为BOOT、rootfs分区。
(3)将Linux系统启动卡BOOT分区中的u-boot.img、tiboot3.bin、tispl.bin固化至eMMC对应分区。
(4)将Linux系统启动卡rootfs-backup分区中的文件系统固化至eMMC的rootfs分区,包括内核镜像和基础设备树文件。
评估板断电,将Linux系统启动卡从评估板Micro SD卡槽中取出,根据评估底板丝印将启动方式选择拨码开关拨为111(1~3),此档位为eMMC启动模式。使用Type-C线连接评估板的USB TO UART1调试串口至PC机,然后将评估板上电启动,串口调试终端会打印如下类似启动信息。

系统启动后会自动登陆root用户,说明从eMMC启动评估板成功。

评估板启动,进入评估板系统后执行如下命令,查看Linux系统启动卡挂载信息。
Target# fdisk -l


执行如下命令,查看eMMC挂载信息。
Target# fdisk -l
Target# dmesg | grep boot



为了保证文件系统健壮性,一般不推荐使用rootfs分区做频繁的数据读写,建议将eMMC剩余空间重新划分分区作为日常数据储存,若无需重新划分eMMC分区可跳过此步骤。
如需通过修改固化系统的脚本文件重新划分eMMC剩余空间使用,请从Linux系统启动卡启动系统,然后执行如下命令,备份原有固化系统的脚本文件mkemmcboot.sh,修改mkemmcboot.sh内容。
固化系统的脚本文件mkemmcboot.sh位于Linux系统启动卡文件系统的"/opt/tools/"目录下。请先备份默认的mkemmcboot.sh做卡脚本。
Target# cp /opt/tools/mkemmcboot.sh /opt/tools/mkemmcboot-bak.sh

执行如下命令,修改mkemmcboot.sh脚本。
Target# vi /opt/tools/mkemmcboot.sh

添加内容如下:
parted -s ${EMMC_DEVICE} unit MiB mkpart primary ext4 -- ${partition_end} -2 //在第123行添加
mkfs.ext4 -F -L rootfs ${partition_list[2]}
sleep 1 //在第144和145行添加
修改内容如下:
partition_list=(${EMMC_DEVICE}p1 ${EMMC_DEVICE}p2 ${EMMC_DEVICE}p3) //在第127行修改


执行脚本制作分区。
Target# /opt/tools/mkemmcboot.sh


执行如下命令,查看划分结果。
Target# fdisk -l


如需恢复默认的mkemmcboot.sh脚本,请执行如下命令。
Target# cp /opt/tools/mkemmcboot-bak.sh /opt/tools/mkemmcboot.sh

若在此前划分了空闲分区(/dev/mmcblk1p3),请执行默认的mkemmcboot.sh脚本重新制作eMMC分区。
Target# /opt/tools/mkemmcboot.sh

执行如下命令,使用parted工具划分eMMC分区。
Target# parted /dev/mmcblk1

执行如下命令,查看剩余的空闲空间。
parted# print free

执行如下命令,划分空闲空间,并退出parted工具。
parted# unit MB mkpart primary ext4 1354MB 7818MB
parted# quit

新建分区后,可能会自动挂载分区,请执行如下命令取消挂载新建的分区。若未自动挂载,则忽略此步骤。
Target# umount /mnt/mmcblk1p3

执行如下命令,格式化新建的分区。
Target# mkfs.ext4 -F -L data /dev/mmcblk1p3

至此,eMMC剩余的空闲空间划分完成,可以手动挂载新的分区,或者重新启动评估板将会自动挂载。
重启评估板,执行如下命令,查看新建的分区信息。
Target# df -h

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。