调整 NAND 分区¶
W25N01 容量为 128MiB,擦除块为 128KiB。分区边界应按 0x20000 对齐。
默认布局¶
| 区域 | 起始偏移 | 大小 | 结束位置 |
|---|---|---|---|
| U-Boot | 0x000000 |
0x100000 |
0x100000 |
| Linux DTB | 0x100000 |
0x020000 |
0x120000 |
| Linux kernel | 0x120000 |
0x600000 |
0x720000 |
| UBI rootfs | 0x720000 |
0x78e0000 |
0x8000000 |
必须同步的四处配置¶
U-Boot 启动参数¶
文件:
uboot/configs/strongpi_v3s_nandflash_defconfig
修改 CONFIG_BOOTARGS 中的 mtdparts,并修改 CONFIG_BOOTCOMMAND 中 DTB、内核的读取偏移和长度。
Linux 设备树¶
文件:
kernel/arch/arm/boot/dts/sun8i-v3s-strongpi-spinand.dts
修改 spi-nand@0/partitions 下各分区的 reg。
烧录命令¶
设备树、内核和 ubi.img 的 xfel spinand write 偏移必须与新布局一致。
UBIFS/UBI 参数¶
根文件系统容量改变后,重新计算:
mkfs.ubifs -c最大 LEB 数ubinize.cfg中的vol_size
检查镜像大小¶
当前 U-Boot 只读取 0x600000 字节内核和 0x4000 字节 DTB:
stat -c '%n %s bytes' \
~/v3s-workspace/kernel/arch/arm/boot/zImage \
~/v3s-workspace/kernel/arch/arm/boot/dts/sun8i-v3s-strongpi-spinand.dtb
必须满足:
zImage <= 0x600000
DTB <= 0x4000
DTB 分区虽然有 0x20000,但读取长度仍由 U-Boot mtd read 命令决定。镜像超过读取长度时,单纯扩大分区不会生效。
修改顺序¶
- 先设计新布局并完成对齐计算。
- 修改 U-Boot 配置和 Linux DTS。
- 重新编译 U-Boot、内核和 DTB。
- 根据新 rootfs 容量重新生成 UBI。
- 检查所有镜像尺寸和写入偏移。
- 全片擦除 NAND 后重新烧录。
分区变更后不应保留旧 UBI 数据,否则旧擦除块内容可能导致挂载异常。