ubi文件系统的 制作 + 挂载 + 若干问题

1 ubi文件系统的制作

1.1 测试项目的文件目录结构如下

image

其中diag.img和diag.ubifs是生成的产物。

ubinize.cfg是自己手写的配置文件,下文将会讲解。

ubi_source_dir是待制作的ubi 镜像的原始文件。

1.2 使用如下命令制作出diag.ubifs

mkfs.ubifs –F -q -r ubi_source_dir -m 2048 -e 126976 -c 71 -o diag.ubifs

我们使用的nand flash是 page size: 2k     block size: 64 page

block_size: 2k * 1024 * 64 = 131072‬

-F: 使能“white-space-fixup”,如果是通过u-boot烧写需要使能此功能

-r: 待制作的文件系统目录

-m: 最小输入输出大小,一般为page_size, 当前spinand的page_size为2048byte

-e: LEB size 逻辑可擦除块大小,block_size - (2*page_size) = 128k - 4k = 126976       2 * 1024 * 62 = 126976‬   62个page size

-c: 文件系统所占用的最大block数,一般小于等于(block_count - 1)。

目前有如下两种方式,我已经验证的是方式一,所以这里写-c 71

方式一:131072 * (71 + 1) = 9,437,184

方式二:LEB = 9216 * 1024 / 126976 - 4 = 70.322

1.3 使用如下命令制作出最终可以烧录的diag.img

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

-p: block size

-m: spi nand flash的最小读写单元,一般为page_size

-o:输出的diag.img文件

ubinize.cfg: 为ubinize所需的配置文件,内容如下

[ubifs]
mode=ubi
image=diag.ubifs
vol_id=0
vol_size=9216KiB
vol_type=dynamic
vol_name=diag
vol_alignment=1
vol_flags=autoresize

 2.linux启动的时候,在/etc/init.d/S打头文件里面加入如下行进行attach

ubiattach /dev/ubi_ctrl -m ${diag_mtdidx} -d ${ubidev_idx}
mount -t ubifs -o noatime,rw /dev/ubi${ubidev_idx}_0 /mnt/diag

我这里使用的是: ubiattach /dev/ubi_ctrl -m 23 -d 2

-m: diag分区的mtd index

-d: 0被ubi rootfs用掉了, 1被另外一个ubi分区用掉了,所以这里写2.

 

问题1:一直显示attach不上,错误如下

[    8.907131] ubi2 error: ubi_eba_init: no enough physical eraseblocks (0, need 1)
[    8.907199] ubi2 error: ubi_attach_mtd_dev: failed to attach mtd23, error -28

目前我的diag分区是mtd23,其大小是10M,我在ubinize.cfg里面配置的是9M,然后将其改成如下的7M,就ok了

image

问题2:怎么判断自己烧录到flash当中的内容和生成的diag.img是一样,确认下是否烧错了

dd if=/dev/mtd23 of=mtd23_dump_16_54.bin bs=2048

 不过如上命令,可能不能handle 坏块

问题3:怎么知道某个mtd分区的偏移地址,大小

cat /sys/class/mtd/mtd23/name
cat /sys/class/mtd/mtd23/offset
cat /sys/class/mtd/mtd23/size

 

posted @ 2025-09-28 19:44  midhillzhou  阅读(25)  评论(0)    收藏  举报