am437x ubi文件系统制作问题解决方案

由于工作原因,需要用到这款芯片,但是官方提供的dameo是从文件系统中烧写U-boot,设备树,内核,文件系统等操作。这种方式很不方便生产,于是打算走最常规的思路,从u- boot中去烧写,于是需要制作Ubi文件系统镜像。制作流程如下:

首先看一下mtd分区情况

 0: NAND.SPL            0x00040000      0x00000000      0
 1: NAND.SPL.backup1    0x00040000      0x00040000      0
 2: NAND.SPL.backup2    0x00040000      0x00080000      0
 3: NAND.SPL.backup3    0x00040000      0x000c0000      0
 4: NAND.u-boot-spl-os  0x00080000      0x00100000      0
 5: NAND.u-boot         0x00100000      0x00180000      0
 6: NAND.u-boot-env     0x00040000      0x00280000      0
 7: NAND.u-boot-env.backup10x00040000   0x002c0000      0
 8: NAND.kernel         0x00700000      0x00300000      0
 9: NAND.file-system    0x1f600000      0x00a00000      0   #文件系统用了502M

nand flash的物理性质

总大小  512M
擦除block  size  128K
最小读写   2K
Sub-page size:      512 byte

mkfs.ubifs -F  -r /home/zl/nfs/rootfs -m 2048 -e 126976 -c 4015 -o ubifs.img

-c:文件系统所占用的最大 block 数,一般小于等于 block count -1(nand 为 256M 的为2047,512M 的为 4095,这里需要根据U-boot给文件系统分了多大空间去计算)。
-F:使能"white-space-fixup",如果是通过 u-boot 烧写需要使能此功能。
-e:LEB size,对于 AM437x 的 NAND driver,为 block size-2x(page size)。
-r:待制作的文件系统目录。
-m:NAND FLASH 的最小读写单元,一般为 page size

 

ubinize.cfg文件如下:
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_size=400MiB         #这里不能太大,会出现问题,后面说
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize

ubinize -o ubi.img -m 2048 -p 128KiB ubinize.cfg

-p:block size。
-m:NAND FLASH 的最小读写单元,一般为 page size。
-o:输出的 ubi.img 文件

这样正常情况ubi.img Ubi文件系统就制作完成了。

如果制作过程出现了如下错误:

am437x ubi文件系统制作问题解决方案_第1张图片

这个是是由于偏移问题导致,我开发板中u-boot启动参数配置如下:console=ttyO0,115200n8 root=ubi0:rootfs rw ubi.mtd=NAND.file-system,4096 rootfstype=ubifs rootwait=1

这个预留了4096,将这里修改成2048就完事。

或者参考:http://www.linux-mtd.infradead.org/faq/ubi.html#L_vid_offset_mismatch

 

如果出现:too large reserved_pebs %d, good PEBs %d   类似错误

就需要修改ubinize.cfg  中的页表,将vol_size大小设置小一点

 

你可能感兴趣的:(work)