UBI文件系统详解

 UBIFS是nokia工程师在the university of Szeged大学帮助下开发的新的Flash filesystem。UBIFS可以认为是JFFS2文件系统的下一代。 UBIFS文件系统是专门为大容量FLASH嵌入式移动设备设计的,挂载UBIFS文件系统必须有mtd接口,而普通的PC机通常都不用mtd管理磁盘,所以这里需要用到nandsim模拟器,用一片RAM空间模拟出mtd设备。
UBIFS文件系统挂载,具体步骤如下:

⑴ 加载UBIFS驱动和mtd驱动
1
2
$ sudo apt-get install mtd-utils
$ sudo modprobe nandsim first_id_byte=0x2c second_id_byte=0xda third_id_byte=0x90 fourth_id_byte=0x95

( 加载nandsim时需要传入的几个参数:first_id_byte、second_id_byte、third_id_byte和 fourth_id_byte是需要模拟的目标NANDFLASH的ID,可以 从 NandFlash芯片datasheet中可查到四个ID bytes,这里为 0x2c,0xda,0x90,0x95)
若执行成功将可以在/dev/目录下找到mtd0和mtd0r0两个设备:
1
2
$ ls /dev/mtd *
/dev/mtd0 /dev/mtd0ro

⑵ 擦除mtd0分区,操作如下:
1
2
$ sudo flash_erase /dev/mtd0 0 0
Erasing 128 Kibyte @ ffe0000 -- 100 % complete

⑶ 将rootfs.ubi装入新建的mtd0分区,用dd命令进行装入,如下:
1
2
3
4
5
6
$ sudo ubiformat /dev/mtd0 -O 2048 -f rootfs.ubi
ubiformat: mtd0 (nand), size 268435456 bytes (256.0 MiB), 2048 eraseblocks of 131072 bytes (128.0 KiB), min. I /O size 2048 bytes
libscan: scanning eraseblock 2047 -- 100 % complete
ubiformat: 2048 eraseblocks are supposedly empty
ubiformat: flashing eraseblock 741 -- 100 % complete
ubiformat: formatting eraseblock 2047 -- 100 % complet

⑷ 挂载UBIFS文件系统
完成以上步骤之后,加载ubi模块并attach到mtd0中,便可以像挂载普通的mtd设备一样挂载UBIFS文件系统。
加载ubi模块并attach到mtd0设备:
1
$ sudo modprobe ubi mtd=0,2048

新建一个挂载点:
1
$ mkdir fsmount

通过以下命令进行挂载:
1
2
3
$ sudo mount -t ubifs ubi0_0 fsmount/
ls fsmount/
bin boot dev etc home lib media mnt proc sbin sys tmp usr var

至此在PC机上挂载UBIFS文件系统完成。


重新生成UBI文件系统:
利用mkfs.ubifs工具重新生成文件系统,输入以下命令生成新的UBIFS文件系统:
1
$ sudo mkfs.ubifs -r fsmount/ -m 2048 -e 126976 -c 2024 -o ubifs.img

mkfs.ubifs 参数说明:
-r 建立文件系统的目录
-m 最小的 I/O 传输单元大小
-e 逻辑擦除块大小
-c 最大的逻辑擦除块数
-o 指定输出文件[/mw_shl_code]
其中可以通过以下命令查看最小的I/O传输单元大小和逻辑擦除块大小:

01
02
03
04
05
06
07
08
09
10
11
12
13
$ ubinfo /dev/ubi0
ubi0
Volumes count: 1
Logical eraseblock size: [color= #ff0000]126976 bytes, 124.0 KiB[/color]
Total amount of logical eraseblocks: 2048 (260046848 bytes, 248.0 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: 1
Minimum input /output unit size: [color= #ff0000]2048 bytes[/color]
Character device major /minor : 250:0
Present volumes: 0

通过以下命令查看最大的逻辑擦除块数:
1
2
3
4
5
6
7
8
$ ubinfo /dev/ubi0_0
Volume ID: 0 (on ubi0)
Type: dynamic
Alignment: 1
Size: [color= #ff0000]2024 LEBs[/color] (256999424 bytes, 245.1 MiB)
State: OK
Name: rootfs
Character device major /minor : 250:1

利用ubinize工具生成fsimage.ubi文件。首先需要建立ubinize的配置文件ubinize.cfg:
1
$ vi ubinize.cfg

输入以下内容,并保存退出:
1
2
3
4
5
6
7
8
9
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_size=64MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
vol_alignment=1

输入以下命令生成最终烧写到目标板的文件系统文件fsimage.ubi:
1
$ sudo ubinize -m 2048 -p 128KiB -o fsimage.ubi ubinize.cfg

ubinize参数说明:
1
2
3
-m 最小输入/输出字节闪存单元的大小
-p FLASH 的物理擦除块的大小
-o 输出的文件

这里和mkfs.ubifs的参数不同, -p的参数为物理擦除块大小,也就是ubi工作在 MTD层之上,所以需要MTD的参数,即物理参数,而ubifs工作在ubi之上,所以需要ubi的参数,即逻辑参数。现在,ubi 备映像已经被保存在了ubi.img中,不仅包含ubifs信息,还包含ubi信息。


至此UBI文件系统制作完成。

你可能感兴趣的:(文件系统)