挂载UBI文件系统

简介

UBI文件系统是linux-2.6.27后内核新加入的flash文件系统,开发环境主机要求至少是在linux2.6.27后的内核,且已经有nandsim,ubi等相关模块。

UBI文件系统不能直接挂载,而是要用 nandsim 模拟出一个 mtd 设备,而且这个 mtd 设备要与 ubi 镜像的参数保存一致,否则后面的挂载会失败。

这些参数包括 mtd 设备的物理块擦除大小 (Physical Erase Block, PEB) 和 页大小 (Page Size)。

制作简单的ubi文件系统

准备目录(rootfs)文件内容如下:

 

使用命令mkfs.ubifs打包为一个UBIFS文件系统映像:

# mkfs.ubifs -r rootfs -m 512 -e 128KiB -c 100 -o rootfs.ubifs

参数说明:

参数说明
-r rootfs指定根文件系统目录树的路径为rootfs/
-m 512Nand Flash的最小读写单元,一般为page size,这里设置为512字节
-e 128KiB逻辑擦除块(LEB)的大小,这里设置为128KB
-c 100逻辑擦除块(LEB)的个数,与分区大小有关,这里设置为100个
-o rootfs.ubifs输出的根文件系统文件为rootfs.ubifs

ubi镜像文件生成

将rootfs.ubifs文件系统打包为镜像文件:

# ubinize -o ubi.img -m 512 -O 512 -p 128KiB ubinize.cfg

参数说明:

参数说明
-o ubi.img输出的根文件系统镜像文件为ubi.img
-m 512Nand Flash的最小读写单元,这里设置为512字节
-O 512卷标识符头(VID header)在物理擦除块(PEB)的偏移,这里设置为512字节
-p128KiB物理擦除块(PEB)的大小,这里设置为128KB
ubinize.cfgubi镜像配置文件

其中ubinize.cfg配置文件的内容如下所示:

[main]
mode=ubi
image=/home/chen/hik/rootfs.ubifs
vol_id=0
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize

 挂载ubi文件系统

过程如下:

  • 模拟创建一个大小合适的闪存设备;
  • 启动ubi驱动,并关联/dev/mtd0;
  • 格式化/dev/mtd0,并写入ubi.img镜像文件;
  • 关联mtd0与ubi_ctrl;
  • 挂载ubi0到/mnt/ubi目录
  •  创建被挂载目录,载入mtd模块,载入ubi模块

 

  • 载入nandsim来模拟nand设备,检查加入模块的环境
# modprobe nandsim first_id_byte=0x2C second_id_byte=0xDA third_id_byte=0x00 fourth_id_byte=0x15
// disk size=128MB, page size=2048 bytes,block size=128KB
// 主要看第四个id,代表大小

  •  将 ubi 与 /dev/mtd0 关联
modprobe ubi mtd=0
  • 把rootfs.ubi加载到mtd的块设备,在这里需要安装mtd-utils工具箱(ubuntu下 直接apt-get install mtd-utils)
# apt install mtd-utils
# ubidetach /dev/ubi_ctrl -m 0      // 格式化前先解绑定
# ubiformat /dev/mtd0 -s 2048 -f ubi.img   
ubiformat: mtd0 (nand), size 134217728 bytes (128.0 MiB), 1024 eraseblocks of 131072 bytes (128.0 KiB), min. I/O size 2048 bytes
libscan: scanning eraseblock 1023 -- 100 % complete  
ubiformat: 1024 eraseblocks are supposedly empty
...
ubiformat: flashing eraseblock 208 -- 100 % complete  
ubiformat: formatting eraseblock 1023 -- 100 % complete 
// 指令功能类似于`dd if=rootfs.ubi of=/dev/mtdblock0 bs=2048`
//-O参数用来指定VID header offset,默认是512
  •  将ubi模块与已载入了rootfs.ubi的mtd模块关联
# ubiattach /dev/ubi_ctrl -m 0 -O 2048
  •  创建ubi分卷,挂载该模块到指定目录
# ubimkvol /dev/ubi0 -N ubifs_0 -m
# mount -t ubifs ubi0:ubifs_0 /mnt/loop/
# ls -ahl /mnt/loop/      //查看
  • 解挂载和绑定
$ sudo umount /mnt/ubi
$ sudo ubidetach /dev/ubi_ctrl -m 0

查看内核错误信息 

如果遇到其他错误可用以下命令查看内核错误信息:

# dmesg | tail -20
  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值