ubi和squashfs关系区别,以及ubi卷上运行squashfs系统

ubi和squashfs关系和区别介绍

rootfs运行squashfs (只读)
roootfs_data运行ubifs (读写)
由于ubifs是运行在UBI卷之上的文件系统,而squashfs是运行在block device之上的文件系统,二者本来无任何交集,但是UBI提供了能够在ubi卷之上创建只读块设备的特性(R/O block devices on top of UBI volumes),这使得squashfs也能够“运行”在ubi卷之上。

R/O block devices on top of UBI volumes
UBI 允许在 UBI 卷上创建只读块设备,该卷适用于只读的、面向块的文件系统,例如 squashfs。
UBI允许在 UBI 卷上创建块设备,但有以下限制:

只读操作。
串行化 I/O 操作,但请记住 NAND 驱动内核也已经串行化了所有 I/O。
尽管有这些限制,块设备对于在UBI卷上安装只读的常规文件系统仍然非常有用。以 squashfs 为例,它可以用作 NAND 设备之上的轻量级只读 rootfs。在这种情况下,UBI层将处理低级细节,例如位翻转处理和磨损均衡。
 

ubifs和squashfs框架图

基于任意MTD设备,attach之后创建2个UBI卷(volume0和volume1)
将squashfs镜像存入volume0,将ubifs镜像存入volume 1
基于volume0 创建 ubi block device,使用该block device 挂载 squashfs
使用vloume 1挂载ubifs
注意:如果不需要运行ubifs,那么只创建一个volume运行squashfs也是可以行的。


下面将以实例演示如何实现在ubi之上运行squashfs:
在进行如下操作之前,需要了解nand flash一些参数。如下是在我实验板上的nand flash的参数:

block size 256KB
page size 4KB
(UBI)LEB 248KB
(UBI)PEB 256KB
flash total size 4096 blocks
flash min I/O size 4KB

制作squashfs

mkdir myfs

ls myfs/
abc  hello

mksquashfs myfs/ squashfs.img -b 256k -nopad -noappend -root-owned -comp xz -processors 1

-b 指定 flash一个block的大小
-comp xz 指定压缩算法为 xz
-root-owned 文件系统内所有文件的owner都是root
-noappend 不追加到已存在的文件系统
-nopad 不要将文件系统填充到 4K 的倍数
-processors 1 使用 1个处理器构建文件系统
 

制作ubifs

ls myubidir/
myubi

mkfs.ubifs -m 4KiB -e 248KiB -c 128 --space-fixup --compr=lzo --squash-uids -r myubidir/ -o ubifs.img
 

制作ubi镜像

需要用到ubinize,ubinize工具还需要一个描述ubi卷的配置文件ubinize.cfg,其配置如下:

[my_squashfs]
mode=ubi
vol_id=0
vol_type=dynamic
vol_name=my_squashfs
image=squashfs.img

[my_ubifs]
mode=ubi
vol_id=1
vol_type=dynamic
vol_name=my_ubifs
vol_flags=autoresize
image=ubifs.img

上述配置文件包含2个卷:

动态卷0,为其分配ID 0 并命名为my_squashfs;卷的内容取自squashfs.img ;
动态卷1,为其分配 ID 1 并命名为my_ubifs; 卷的内容取自 ubifs.img;
my_squashfs 卷的类型必须是dynamic,否则后续无法挂载

ubinize -m 4KiB -p 256KiB ubinize.cfg -o ubi.image

烧写ubi镜像

ubiformat  /dev/mtd54 -y -f /tmp/ubi.img 

ubiattach -p /dev/mtd54

生成ubi卷:使用ubinfo -a查看:

ubi10
Volumes count:                           2
Logical eraseblock size:                 253952 bytes, 248.0 KiB
Total amount of logical eraseblocks:     1422 (361119744 bytes, 344.3 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:  80
Current maximum erase counter value:     4
Minimum input/output unit size:          4096 bytes
Character device major/minor:            502:0
Present volumes:                         0, 1

Volume ID:   0 (on ubi10)
Type:        dynamic
Alignment:   1
Size:        1 LEBs (253952 bytes, 248.0 KiB)
State:       OK
Name:        my_squashfs
Character device major/minor: 502:1
-----------------------------------
Volume ID:   1 (on ubi10)
Type:        dynamic
Alignment:   1
Size:        1337 LEBs (339533824 bytes, 323.8 MiB)
State:       OK
Name:        my_ubifs
Character device major/minor: 502:2

对应的ubi节点生成:ls /dev/ubi10*

ubi10    ubi10_0  ubi10_1

ubifs文件系统挂载

mkdir /tmp/myubifs_dir

mount -t ubifs /dev/ubi10_1 /tmp/myubifs_dir/

squashfs文件系统挂载

创建只读块设备
ubiblock 工具用于创建或者销毁ubi块设备,使用方法如下:

Usage: ubiblock [-c,-r] <UBI volume node file name> Example:

ubiblock -c /dev/ubi0_0

ubiblock -r /dev/ubi0_0

ubiblock -c /dev/ubi10_0 

mkdir mysquashfs_dir

mount -t squashfs /dev/ubiblock10_0 /tmp/mysquashfs_dir

文件系统挂载情况查看

df | grep my   
/dev/ubi10_1             26116        32     26084   1% /tmp/myubifs_dir
/dev/ubiblock10_0          256       256         0 100% /tmp/mysquashfs_dir

cd /tmp/mysquashfs_dir/
:/tmp/mysquashfs_dir# touch aa
touch: cannot touch `aa': Read-only file system

这里注意:虽然是挂载在tmp目录下,但是在/tmp/mysquashfs_dir下是无法创建文件的。

参考:

Memory Technology Device (MTD) Subsystem for Linux. //ubifs介绍

Squashfs 4.0 Filesystem — The Linux Kernel documentation //squashfs介绍

后续遗留关注:

./bin/ubinize -v -o ubi.img -m 4096 -p 256KiB -s 4096 ./bin/ubinize.cfg中

image=dir/pub.key参数

generate_verity_key

simg2img

fscrypt

dm_0节点产生等

dev/dm-2                  128       128         0 100% /test_dir

 umount /dev/ubiblock13_0 
umount: /dev/ubiblock13_0: not mounted.

而是需要umount /dev/dm-2(DM_TABLE_LOAD DM_DEV_CREATE DM_DEV_STATUS android fs_mgr_main这一套)

ubi较好的文章学习:【NAND文件系统】UBI介绍_linux_Ruler.-华为云开发者联盟


 


 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a2591748032-随心所记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值