25. 四大组件组成鲁班猫SD镜像

25.1. 官方镜像与鲁班猫镜像

我们将kernel,dtb,dtbo打包进了rootfs内,这样更为通用且更换其中如何一部分只需将文件替换即可。官方镜像则得烧写指定地址需要更新其中一部分则较为困难

未找到图片jxqb

25.2. 使用平台

使用平台:Ubuntu 18.04.5 LTS x86版本

一般情况其他的Linux发行版都行的

25.3. 安装编译工具和依赖

编译设备树之前需要安装必要的环境工具。

1
sudo apt install xz-utils debootstrap multistrap

25.4. 获取制作脚本

可以从这获取脚本

1
 git clone https://gitee.com/LubanCat/build_sd_img.git

25.5. 操作方法

默认./all下为野火2022-12-24的镜像组件,如果需要修改可以根据以下进行修改。

25.5.1. 修改rootfs

./all/rootfs下默认是没有内容的,需要把自己的rootfs解压到./all/rootfs目录,或者将野火官方的文件系统解压到./all/rootfs下。

野火官方的文件系统可以从网盘 i.MX6ULL系列/3、Debian镜像/ebf_debian_2022_12_24/usb烧录文件/mfgtools-release/Profiles/Linux/OS Firmware/release中获取.

console-armhf-rootfs-lubancat-buster.tar为纯净版文件系统。

qt-armhf-rootfs-lubancat-buster.tar为带qt的文件系统。

选择一个需要的文件系统,解压到./all/rootfs下。

提示

如果使用野火的发布的文件系统,需要稍作修改。野火镜像的/boot分区是由/dev/mmcblk0p1或/dev/mmcblk1p1进行挂载得到的,以上压缩包解压出来文件系统默认没有添加挂载/boot分区命令。

如果使用野火发布的文件系统,将文件系统解压后,打开解压后文件系统的 /etc/fstab 文件添加挂载/boot分区命令。

添加内容如下:

1
2
 #mmcblk0p1为sd卡镜像的boot分区,如果是emmc则是mmcblk1p1
 /dev/mmcblk0p1 /boot auto defaults 0 0

25.5.2. Kernel的修改

把前面章节生成的zImage拷贝到./all/boot/kernel文件夹下更名替换vmlinuz-4.19.35-imx6,注意boot文件夹不能超过40M

25.5.3. uboot的修改

把生成的u-boot-dtb.imx更名替换./all/uboot/目录下的u-boot-mmc.imx,注意编译时需要选择mmc版的uboot配置文件编译

25.5.4. 设备树的修改

把面章节生成的设备树imx6ull-mmc-npi.dtb替换.all/rootfs/usr/lib/linux-image-4.19.35-imx6/imx6ull-mmc-npi.dtb

25.5.5. 设备树插件的修改

把生成的设备树插件xxx.dtbo添加或替换.all/rootfs/usr/lib/linux-image-4.19.35-imx6/overlays/下,并在./all/boot/uEnv.txt进行相应的修改

25.5.6. 构建:

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卡的时间过长,我们在烧录完成后再对分区进行扩容即可。

build_sd_img.jpg

25.6. 烧录

镜像烧写

25.7. 扩容

用以上打包出来的镜像不会自动进行扩容,如果打包参数比较大,那么打包出来的镜像包烧录到sd卡需要的时间比较长,建议在打包的时候参数尽量小,避免烧录镜像至sd卡的时间过长,我们在烧录完成后再对分区进行扩容即可。

烧录镜像后,将sd卡插入板卡并以sd卡启动方式启动,执行下面命令对分区进行扩容。

#sd卡的主分区是/dev/mmcblk0
sudo parted /dev/mmcblk0

#以GB作为单位查看分区信息
unit GB print

#对mmcblk0的第2分区进行扩容,该分区存放跟文件系统
resizepart 2

#按提示输入yes进行确认
yes

#输入参数-1表示完全使用剩余空间
-1

#退出交互
quit

# 调整文件系统大小
sudo resize2fs /dev/mmcblk0p2
parted_mmcblk.png

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

提示

如果sd卡只是作为烧录卡,用来将系统烧录到emmc,那么sd卡可以不进行扩容,因为在烧录emmc的时候,会对emmc进行充分扩容,以确保充分利用emmc空间。

sd卡与emmc/nand互相烧录请参考: emmc/nand与SD卡之间镜像备份与烧录 章节。