制作 TF 卡镜像¶
本页把 U-Boot、Linux、设备树和根文件系统组合成 256MiB 整盘镜像。先按手工步骤理解布局,再使用板级支持包中的辅助脚本。
输入文件¶
~/v3s-workspace/uboot/u-boot-sunxi-with-spl.bin
~/v3s-workspace/kernel/arch/arm/boot/zImage
~/v3s-workspace/kernel/arch/arm/boot/dts/sun8i-v3s-strongpi-spinand.dtb
~/v3s-workspace/buildroot-2023.02.3/output/images/rootfs.tar
U-Boot 必须使用 strongpi_v3s_tfcard_defconfig 编译。
创建镜像和分区¶
mkdir -p ~/v3s-workspace/images/tfcard
cd ~/v3s-workspace/images/tfcard
truncate -s 256M strongpi_v3s_tfcard.img
创建 MBR、64MiB FAT32 启动分区和使用剩余空间的 Linux 分区:
sudo sfdisk strongpi_v3s_tfcard.img <<'EOF'
label: dos
unit: sectors
start=2048, size=131072, type=c
type=83
EOF
关联 loop 设备:
LOOP_DEV=$(sudo losetup --find --show --partscan strongpi_v3s_tfcard.img)
echo "$LOOP_DEV"
loop 分区节点通常在设备名后增加 p1 和 p2。保存实际分区节点:
BOOT_PART="${LOOP_DEV}p1"
ROOT_PART="${LOOP_DEV}p2"
sudo mkfs.vfat -F 32 -n V3SBOOT "$BOOT_PART"
sudo mkfs.ext4 -F -L V3SROOT "$ROOT_PART"
写入启动文件和根文件系统¶
sudo mkdir -p /mnt/v3s-boot /mnt/v3s-root
sudo mount "$BOOT_PART" /mnt/v3s-boot
sudo mount "$ROOT_PART" /mnt/v3s-root
sudo cp ~/v3s-workspace/kernel/arch/arm/boot/zImage /mnt/v3s-boot/
sudo cp ~/v3s-workspace/kernel/arch/arm/boot/dts/sun8i-v3s-strongpi-spinand.dtb \
/mnt/v3s-boot/sun8i-v3s-strongpi.dtb
sudo tar --numeric-owner -xpf \
~/v3s-workspace/buildroot-2023.02.3/output/images/rootfs.tar \
-C /mnt/v3s-root
sync
TF 版 U-Boot 固定读取 sun8i-v3s-strongpi.dtb,因此复制设备树时必须使用这个目标文件名。
卸载分区:
sudo umount /mnt/v3s-boot /mnt/v3s-root
将 U-Boot 写到镜像 8KiB 偏移:
sudo dd if=~/v3s-workspace/uboot/u-boot-sunxi-with-spl.bin \
of=strongpi_v3s_tfcard.img bs=1024 seek=8 conv=fsync,notrunc
sync
sudo losetup -d "$LOOP_DEV"
第一分区从 1MiB 开始,U-Boot 位于前面的保留区域,不会覆盖分区文件系统。
检查镜像¶
fdisk -l strongpi_v3s_tfcard.img
sha256sum strongpi_v3s_tfcard.img
辅助脚本¶
板级支持包提供相同步骤的辅助脚本:
cd ~/v3s-workspace/strongpi-v3s-support
sudo bash tools/build_tfcard_image.sh
默认输出位于:
~/v3s-workspace/images/tfcard/strongpi_v3s_tfcard.img