制作 NAND 文件系统¶
SPI NAND 不能直接写入 ext4 或解压后的目录。根文件系统需要先生成 UBIFS,再封装成 UBI 镜像。
准备目录¶
mkdir -p ~/v3s-workspace/images/nand/rootfs
cd ~/v3s-workspace/images/nand
sudo tar --numeric-owner -xpf \
~/v3s-workspace/buildroot-2023.02.3/output/images/rootfs.tar \
-C rootfs
手工生成 UBIFS¶
W25N01 的页大小为 2048 字节,擦除块大小为 128KiB。执行:
mkfs.ubifs \
-x lzo \
-F \
-m 2048 \
-e 126976 \
-c 950 \
-o rootfs_ubifs.img \
-r rootfs
创建 UBI 配置¶
新建 ubinize.cfg,内容如下:
[rootfs-volume]
mode=ubi
image=rootfs_ubifs.img
vol_id=0
vol_size=100MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
vol_alignment=1
生成 UBI 镜像¶
ubinize \
-o ubi.img \
-m 2048 \
-p 131072 \
-O 2048 \
-s 2048 \
ubinize.cfg \
-v
检查输出:
ls -lh rootfs_ubifs.img ubi.img ubinize.cfg
烧录时使用最终的 ubi.img,写入偏移为 0x720000。
参数关系¶
| 参数 | 数值 |
|---|---|
| NAND 最小 I/O 单元 | 2048 字节 |
| 物理擦除块 PEB | 131072 字节 |
| UBI 数据偏移 | 4096 字节 |
| UBIFS 逻辑擦除块 LEB | 126976 字节 |
| 最大 LEB 数 | 950 |
| UBI 卷初始大小 | 100MiB,首次启动自动扩展 |
修改 NAND 分区后,必须重新核算最大 LEB 数和 UBI 卷大小。
辅助脚本¶
确认理解上述参数后,可执行:
cd ~/v3s-workspace/strongpi-v3s-support
bash tools/build_nand_image.sh
脚本读取 Buildroot 的 rootfs.tar,输出到 ~/v3s-workspace/images/nand/。