PS:ubifs烧录文件系统直接重新烧录不会成功,必须先ubiformat后才能重新烧录,切记!!!
buildroot配置
[*] ubi image containing an ubifs root filesystem
(0x20000) physical eraseblock size
(2048) sub-page size
[ ] Use custom config file
(-Q 0 -v) Additional ubinize options
-*- ubifs root filesystem
(0x1f000) logical eraseblock size
(0x800) minimum I/O unit size
(140) maximum logical eraseblock count
ubifs runtime compression (lzo) --->
Compression method (no compression) --->
(-F -v) Additional mkfs.ubifs options
一、ubi镜像
该镜像可以直接使用dd命令烧录,烧录时注意开头PS提示
mtdinfo /dev/mtd0
mtd0
Name: uboot
Type: nand
Eraseblock size: 131072 bytes, 128.0 KiB
Amount of eraseblocks: 8 (1048576 bytes, 1024.0 KiB)
Minimum input/output unit size: 2048 bytes
Sub-page size: 2048 bytes
OOB size: 128 bytes
Character device major/minor: 90:0
Bad blocks are allowed: true
Device is writable: true
(0x20000) physical eraseblock size
可通过mtdinfo的Eraseblock size查看 dex 131072 = hex 0x20000
(2048) sub-page size
可通过mtdinfo的Sub-page size查看
Use custom config file
[ubifs]
mode=ubi
vol_id=0 //该选项为1时设备节点为/dev/ubi0_1
vol_type=dynamic
vol_name=rootfs
vol_alignment=1
#vol_size = 15MiB //指定跟文件系统大小 该选项和vol_flags的autoresize冲突
vol_flags=autoresize
image=BR2_ROOTFS_UBIFS_PATH
(-Q 0 -v) Additional ubinize options
-Q 0的说明:ubifs挂载时会校验image_seq,该值在制作镜像会随机生成。
如果系统已有ubifs参数的话会导致image_seq不一致导致无法挂载,指定为 0 时会自动复制为原有的image_seq或者重新随机生成。
冲突的话会报 bad image sequence number xxxxxxx in PEB xxx, expected xxxxxxxxx这类的异常。
二、ubifs文件系统
ubinfo /dev/ubi0
ubi0
Volumes count: 1
Logical eraseblock size: 126976 bytes, 124.0 KiB
Total amount of logical eraseblocks: 192 (24379392 bytes, 23.2 MiB)
Amount of available logical eraseblocks: 0 (0 bytes)
Maximum count of volumes 128
Count of bad physical eraseblocks: 0
Count of reserved physical eraseblocks: 20
Current maximum erase counter value: 11
Minimum input/output unit size: 2048 bytes
Character device major/minor: 248:0
Present volumes: 0
(0x1f000) logical eraseblock size
可通过ubinfo的Logical eraseblock size查看 dex 126976 = hex 0x1f000
(0x800) minimum I/O unit size
可通过ubinfo的Minimum input/output unit size查看 dex 2048 = hex 0x800
(140) maximum logical eraseblock count
该选项貌似不会起作用,挂载的时候会重新调整。
ubifs runtime compression (lzo) --->
Compression method (no compression) --->
压缩格式,默认即可
(-F -v) Additional mkfs.ubifs options
-F指设置修正空白区域的标志,在第一次mount的时候对空白区域进行修正,以便后续能正常使用。
关于以下信息
Total amount of logical eraseblocks: 192 (24379392 bytes, 23.2 MiB)
Amount of available logical eraseblocks: 0 (0 bytes)
Amount of available logical eraseblocks这个值的确定:
用ubiformat格式化的时候会自动分配。此时指不为0。
当使用vol_flags=autoresizes时烧录固件后该值是0的状态,大小自动调整。
当指定vol_size大小时,该值Total amount of logical eraseblocks减去vol_size后剩余大小。
三、bootargs
mem=64M earlycon console=ttyS0,115200 init=/linuxrc ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs rw mtdparts=spi_nfc:1M(uboot),3M(kernel),28M(update),1M(config),24M(rootfs),-(data)
ubi.mtd=4可以单独使用,可以预挂载其他非根文件系统分区,如以下将data分区初始化为/dev/ubi0_0
mem=64M earlycon console=ttyS0,115200 init=/linuxrc root=/dev/mtdblock4 rootfstype=squashfs ubi.mtd=5 mtdparts=spi_nfc:1M(uboot),3M(kernel),28M(update),1M(config),24M(rootfs),-(data)