制作 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/