15. 制作SD烧录包¶
除了上一章节介绍的,可以使用Mfgtool工具通过板卡烧录镜像到SD卡,那么是否有不借助板卡的方法烧录SD卡呢? 答案是有的,本章节介绍如何将镜像的四大组件打包成镜像包,可以通过balenaEtcher工具烧录到SD卡,而无需借助板卡。
15.2. 获取制作镜像的脚本¶
可以从这里获取脚本,注意本教程需要使用buildroot分支。
1 2 | #-b指定使用buildroot分支
git clone -b buildroot https://gitee.com/LubanCat/build_sd_img.git
|
15.3. 构建方法及修改¶
默认./all下为野火Buildroot 2021.02.3的镜像组件,如果需要修改可以根据以下进行修改。
15.3.1. 修改rootfs¶
./all/rootfs下 默认是没有内容的 ,需要把自己的rootfs解压到./all/rootfs目录,或者使用野火编译好的文件系统。
如果需要野火官方的文件系统,可以从资料网盘/4-其他Linux镜像/buildroot镜像/xxx日期/usb烧录文件/mfgtools-release_xxx.zip中获取, 解压后,mfgtools-release/Profiles/Linux/OS Firmware/release目录下,rootfs.tar为buildroot文件系统,modules.tar.bz2,为驱动模块。
将rootfs.tar解压到./all/rootfs目录下,将modules.tar.bz2解压到./all/rootfs/lib/modules/目录下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #拷贝文件系统和驱动模块
cp rootfs.tar ./all/rootfs/
cp modules.tar.bz2 ./all/rootfs/
#进入rootfs目录
cd ./all/rootfs
#解压rootfs.tar后删除
tar xvf rootfs.tar
rm rootfs.tar
#解压modules.tar.bz2后删除
mkdir -p lib/modules
tar xvf modules.tar.bz2 -C lib/modules/
rm modules.tar.bz2
|
15.3.2. Kernel的修改¶
把生成的zImage替换到./all/boot/目录下,注意boot文件夹不能超过40M
15.3.3. uboot的修改¶
把生成的u-boot-dtb.imx更名为u-boot-mmc.imx,然后替换./all/uboot/目录下,注意编译时需要选择mmc版本的uboot配置文件进行编译
15.3.4. 设备树的修改¶
把生成的设备树imx6ull-mmc-npi-lite.dtb替换./all/boot/目录下,注意boot文件夹不能超过40M
15.3.5. 构建:¶
1 | sudo ./build_sd_img.sh 1
|
重要
构建前请确认./all/rootfs目录已经放了文件系统,参考以上 1.修改rootfs 确认。
执行sudo ./build_sd_img.sh 1 构建SD卡镜像参数1为内存卡大小为1G,同时也为镜像内可用大小,该参数支持小数,比如输入0.5即构建500M大小的镜像包,但总大小最小要求为rootfs文件夹的大小+40M 。
建议在打包的时候参数尽量小,避免烧录镜像至sd卡的时间过长,我们在烧录完成后再对分区进行扩容即可。

15.4. 烧录镜像至SD卡¶
15.4.1. Etcher工具简介¶
Etcher是一款简易好用的镜像烧录工具,主要用于刻录镜像到USB设备,包括SD卡和U盘, 支持ios、img、zip、raw、sdcard等多种镜像格式。它的用户界面清爽美观,操作简单, 在软件自动识别到USB设备后,点击几次鼠标就能完成镜像的烧录。
同时Etcher是一个跨平台工具,支持 Mac、Windows 和 Linux , 国内外开发者常用它将树莓派SD卡启动镜像烧录到SD卡中。
15.4.2. Etcher工具下载¶
可以访问官网:https://www.balena.io/etcher ,根据自己的电脑系统下载对应版本即可。
或者使用野火资料包里提供的,资料网盘/6-开发软件/balenaEtcher-Setup-1.5.56.exe
15.4.3. 烧录镜像¶
1、打开安装好的Etcher工具,软件界面如下图所示:

2、选择上一小节打包生成了imx6ull.img.xz镜像包,然后选择要烧录的SD卡,最后点击开始烧录,如下图所示:

3、烧录完成后如下图所示:

4、将板卡拨码配置为2-5-8,然后插入烧录好镜像的SD卡进行启动。
15.5. 扩容¶
用以上打包出来的镜像不会自动进行扩容,如果打包参数比较大,那么打包出来的镜像包烧录到sd卡需要的时间比较长,建议在打包的时候参数尽量小,避免烧录镜像至sd卡的时间过长,我们在烧录完成后再对分区进行扩容即可。
15.5.1. 添加扩容工具¶
扩容需要使用resize2fs和parted工具,构建文件系统的时候可以将以下选项进行选择,野火发布的文件系统 默认是没有勾选的。
1 2 3 | BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_PARTED=y
|
勾选后可以单独构建软件包或者重新构建文件系统:
1 2 3 4 5 | #单独构建软件包
make e2fsprogs parted
#重新构建文件系统
make -j16
|
单独构建软件包生成的文件位于output/target/目录下,需要以下文件(以下是作者整理的):
1 2 3 4 5 6 7 8 9 10 11 12 | └── usr
├── lib
│ ├── libblkid.so.1
│ ├── libcom_err.so.2
│ ├── libe2p.so.2
│ ├── libext2fs.so.2
│ ├── libparted.so.2
│ └── libuuid.so.1
└── sbin
└── parted
└── sbin
└── resize2fs
|
或者可以使用野火编译好的: my_package.tar.gz
将my_package.tar.gz传到板卡进行解压,然后将对应文件拷贝到板卡/usr/lib和/usr/sbin/目录下。
如果是重新编译文件系统方式,重新烧录文件系统即可。
15.5.2. 扩容文件系统¶
执行下面命令对分区进行扩容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #sd卡的主分区是/dev/mmcblk0
parted /dev/mmcblk0
#以GB作为单位查看分区信息
unit GB print
#对mmcblk0的第2分区进行扩容,该分区存放跟文件系统
resizepart 2
#按提示输入yes进行确认
yes
#输入参数-1表示完全使用剩余空间
-1
#退出交互
quit
# 调整文件系统大小
resize2fs /dev/mmcblk0p2
|

同理,emmc分区是mmcblk1,如果有需要对emmc分区进行扩容也可以使用以上方法。