【文件系统】如何在ubi之上运行squashfs

在UBI之上运行squashfs文件是openwrt系统中常见的方式:

  • 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层将处理低级细节,例如位翻转处理和磨损均衡。

实现原理

在这里插入图片描述

  1. 基于任意MTD设备,attach之后创建2个UBI卷(volume0和volume1)
  2. 将squashfs镜像存入volume0,将ubifs镜像存入volume 1
  3. 基于volume0 创建 ubi block device,使用该block device 挂载 squashfs
  4. 使用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

制作squashfs需要用到mksquashfs工具,使用说明参见mksquashfs

创建fs目录内容如下:

$ ls
apps  this_is_squashfs.txt

执行如下命令:根据fs目录创建squashfs,输出的squashfs镜像文件为 squashfs.img

mksquashfs fs/ squashfs.img -b 256k -nopad -noappend -root-owned -comp xz -processors 1
  • -b 指定 flash一个block的大小
  • -comp xz 指定压缩算法为 xz
  • -root-owned 文件系统内所有文件的ow
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

知否,知否

来一杯冰美式把

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

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

打赏作者

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

抵扣说明:

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

余额充值