UBIFS是nokia工程师在the university of Szeged大学帮助下开发的新的Flash filesystem。UBIFS可以认为是JFFS2文件系统的下一代。 UBIFS文件系统是专门为大容量FLASH嵌入式移动设备设计的,挂载UBIFS文件系统必须有mtd接口,而普通的PC机通常都不用mtd管理磁盘,所以这里需要用到nandsim模拟器,用一片RAM空间模拟出mtd设备。
UBIFS文件系统挂载,具体步骤如下:
⑴ 加载UBIFS驱动和mtd驱动
( 加载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两个设备:
⑵ 擦除mtd0分区,操作如下:
⑶ 将rootfs.ubi装入新建的mtd0分区,用dd命令进行装入,如下:
⑷ 挂载UBIFS文件系统
完成以上步骤之后,加载ubi模块并attach到mtd0中,便可以像挂载普通的mtd设备一样挂载UBIFS文件系统。
加载ubi模块并attach到mtd0设备:
新建一个挂载点:
通过以下命令进行挂载:
至此在PC机上挂载UBIFS文件系统完成。
重新生成UBI文件系统:
利用mkfs.ubifs工具重新生成文件系统,输入以下命令生成新的UBIFS文件系统:
mkfs.ubifs 参数说明:
-r 建立文件系统的目录
-m 最小的 I/O 传输单元大小
-e 逻辑擦除块大小
-c 最大的逻辑擦除块数
-o 指定输出文件[/mw_shl_code]
其中可以通过以下命令查看最小的I/O传输单元大小和逻辑擦除块大小:
通过以下命令查看最大的逻辑擦除块数:
利用ubinize工具生成fsimage.ubi文件。首先需要建立ubinize的配置文件ubinize.cfg:
输入以下内容,并保存退出:
输入以下命令生成最终烧写到目标板的文件系统文件fsimage.ubi:
ubinize参数说明:
这里和mkfs.ubifs的参数不同, -p的参数为物理擦除块大小,也就是ubi工作在 MTD层之上,所以需要MTD的参数,即物理参数,而ubifs工作在ubi之上,所以需要ubi的参数,即逻辑参数。现在,ubi 备映像已经被保存在了ubi.img中,不仅包含ubifs信息,还包含ubi信息。
至此UBI文件系统制作完成。
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文件系统制作完成。