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文件系统制作完成。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值