UBI文件系统和镜像的制作及分区挂载说明
定义:无排序区块图像文件系统(Unsorted Block Image File System, UBIFS),主要适用于nand flash设备。
三个子系统:
UBIFS文件系统
可以理解为用户层,工作于UBI之上。
比如我们设备中挂载可见的分区。/dev/ubi3_0 22616 3068 19548 14% /data
UBI
是MTD设备的高层次表示,一般用户层也可以在这里做开发定制,比如升级,通过ioctl控制MTD设备的读写。MTD子系统
提供nand flash底层访问接口。
下面是这三个子系统的关系图,画图太费时,借用一下牛画好滴~~
好了,接下来就可以讲UBIFS文件系统的制作和镜像的制作,以及分区的挂载了,顺序就是先制作*.ubifs,然后制作*.img,最后mount分区。
一、UBIFS文件系统制作
我们先手动通过命令来制作UBIFS
# mkdir test
# ./mkfs.ubifs -r test -m 4096 -e 253952 -c 400 -o my.ubifs
这两条命令后,就会产生my.ubifs了,mkfs.ubifs工具mtd-utils中会提供,这个大家就想办法自己去弄吧。
参数说明如下:
Options:
-r, -d, --root=DIR build file system from directory DIR//指定根文件系统目录树的路径
-m, --min-io-size=SIZE minimum I/O unit size //Nand Flash的最小读写单元,一般为page size。
-e, --leb-size=SIZE logical erase block size//逻辑擦除块的大小
-c, --max-leb-cnt=COUNT maximum logical erase block count//逻辑擦除块的个数,与分区大小有关
-o, --output=FILE output to FILE//输出的根文件系统镜像文件
-j, --jrn-size=SIZE journal size
-R, --reserved=SIZE how much space should be reserved for the super-user
-x, --compr=TYPE compression type - "lzo", "favor_lzo", "zlib" or"none" (default: "lzo")
-X, --favor-percent may only be used with favor LZO compression and defineshow many percent better zlib should compress to makemkfs.ubifs use zlib instead of LZO (default 20%)
-f, --fanout=NUM fanout NUM (default: 8)
-F, --space-fixup file-system free space has to be fixed up on first mount(requires kernel version 3.0 or greater)
-k, --keyhash=TYPE key hash type - "r5" or "test" (default: "r5")
-p, --orph-lebs=COUNT count of erase blocks for orphans (default: 1)
-D, --devtable=FILE use device table FILE
-U, --squash-uids squash owners making all files owned by root
-l, --log-lebs=COUNT count of erase blocks for the log (used only fordebugging)
-v, --verbose verbose operation
-V, --version display version information
-g, --debug=LEVEL display debug information (0 - none, 1 - statistics,2 - files, 3 - more details)
-h, --help display this help text
这里重点讲一下这个-c 400是怎么得来的,首先我的物理分区大小是100MB
公式:(10010241024)/ 4096 / 64 = 400
理论上要给bad block坏块预留点空间,大家制作的时候尽量预留一点出来,-c 指定该分区最大逻辑擦除块数量,该值随着根文件系统分区的大小和该分区的坏块数调整。
二、UBI镜像的制作
有了my.ubifs后,就可以使用如下命令制作img镜像了,命令如下:
# ./ubinize -o my_app.img -m 4096 -p 256KiB ubinize.cfg
其中ubinize.cfg内容如下:
[ubifs]
mode=ubi
image=./my.ubifs
vol_id=0
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
如上,ubinize是mtd-util中提供的,
“配置文件说明:
mode=ubi
image=./my.ubifs 指定mkfs.ubifs制作生成的根文件系统镜像文件路径;
vol_id=0 指定根文件系统树的卷标为0,u-boot的bootargs参数需要根据它来设置;
vol_size=xxx指定该UBI逻辑卷的大小,该值计算公式一般为 逻辑擦除块大小逻辑擦除块个数,
该值一般不用写,默认值是image大小。
vol_type=dynamic
vol_name=rootfs 指定UBI卷的名称,u-boot的bootargs参数需要根据它来设置;
vol_flags=autoresize UBI Subsystem在系统启动时自动调整逻辑擦除块的个数”
三、ubifs分区的挂载
有了镜像,在gtp分区表中添加新增的分区配置,我这里是添加了100MB的空间,然后烧录到设备中,那开机的时候需要去挂载新增的分区。
需要两个步骤完成:
1、ubiattach
shell脚本如下,10是dev/mtd10的序号,2是整个ubifs中的第二个序号
ubiattach -m 10 -d 2 /dev/ubi_ctrl
2、mount
将/dev/ubi2_0挂载/data目录,这个2就是上面的第二个参数序号2
mount -t ubifs -o "rw,nosuid,nodev,noatime" /dev/ubi2_0 /data
最终的开机效果:
/dev/ubi2_0 79284 24 79260 0% /data
四、分区的读写
最后我还想讲一下如何在用户层对这个/dev/ubi2_0进行读写操作,比如OTA
Nand flash设备和eMMC的有些不同,需要先erase后write,不然数据是不会成功的。
这里提供一下最终的几个系统调用,这些是kernel提供给上层的操作接口。
ioctl(dev_fd, MEMGETINFO, &meminfo); 查询
ioctl(dev_fd, MEMGETBADBLOCK, &offset); 判断是否有坏块
ioctl(dev_fd, MEMERASE, &erase);erase擦除
写入的话,直接write到指定的fd就可以了
好了,以上就是整理的nand相关的ubifs的内容,希望对大家有所帮助!
UBI文件系统和镜像的制作及分区挂载说明相关推荐
- 紫枫术河 imx6 uboot的mtd分区总结(rootfs为ubi文件系统) imx6 uboot的mtd分区总结(rootfs为ubi文件系统)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_29729577/article/details/51130209 此文章基于U-Boot 20 ...
- 解压ubi文件_制作ubi文件系统
制作 ubi 文件系统 目录 开发环境 ................................................................................ ...
- linux内核创建ubi,UBI文件系统制作和挂载
关于参数可以参考attach的命令输出: root@ubuntu:~# ubiattach /dev/ubi_ctrl -m 4 -d 0 UBI device number 0, total 40 ...
- linux设置分区读写属性,嵌入式Linux ubi文件系统制做、分区设置、只读文件系统,uboot启动参数root...
当前平台, 基于君正的X10000平台的嵌入式Linux 系统linux 0 目的ubuntu 我要设置根文件系统为可读写, 设置data分区上的文件系统为只读学习 1 设置各文件系统的读写属性sp ...
- UBI 文件系统移植 sys 设备信息【转】
转自:http://blog.chinaunix.net/uid-25304914-id-3058647.html cat /sys/class/misc/ubi_ctrl/dev --------- ...
- UBI文件系统(转)
UBI-Unsorted Block Imagine http://www.linux-mtd.infradead.org/doc/ubi.html 1.注意 很多人搞不清楚UBI到底是什么,这就是写 ...
- UBI文件系统遇到的问题
0. ubifs_iget: failed to read inode 1, error -22 经常是由于没有写全整个数据,最好检测下写入的数据大小是否对,尤其是通过环境变量 filesize 去 ...
- Hi3516A开发-- UBI 文件系统使用指南
这篇文章在 Hi3516A V100R001C01SPC050\02.Only for Reference\02.software\documents_cn\UBI 文件系统使用指南.pdf 拿出来只 ...
- android 镜像文件制作
一:update.zip包的制作 1:新建一个目标,在此目录下准备好需要的文件,如system目录文件.boot.img.recovery.img等. mkdir testupdate ...
最新文章
- [ACM] hdu 1253 胜利大逃亡 (三维BFS)
- go文件服务器mimetype,网络:什么是 MIME TYPE?
- BZOJ2299 HAOI2011向量(数论)
- 基于暗通道优先算法的去雾应用Matlab
- 【NLP】全面详解 | 深度学习中的注意力机制(一)
- 转 框架页有Frame、Iframe、Frameset 3个标记,初学者容易将三者混淆,下面分别讲解三者的区别。...
- nodejs匿名函数
- 27、jdbc操作数据库(4)
- idea怎么将本地文件和远程git对比_IDEA新建本地项目关联远程git仓库
- 仪表板断面_【干货】内外饰断面设计规范
- LLVM Bitcode File Format - LLVM 比特流文件格式
- PHP两个日期之间的所有日期
- 读书笔记——实时渲染(一)
- Chrome和360浏览器“无法翻译此网页”解决方法
- 战争调度(树形DP+BFS)
- 查询水果价格(15 分)
- 通用流量办什么卡划算?告诉你三大运营商该如何选择?
- ORA-12170:TNS:连接超时错误处理
- Word 排版:插入题注和引用题注
- Oracle报错宗介
热门文章
- 中国十大穷光蛋排行榜
- 一个优秀的程序员应该如何提高工作效率?
- 经典面试题(39):以下代码将输出的结果是什么?
- 监督学习 | 集成学习 之AdaBoost、梯度提升及Slearn实现
- 在线WGCNA分析 (直接出交互式结果报告)
- php图片长宽处理,用php调整图片宽高 | 学步园
- python gui界面实例_Python界面(GUI)编程PyQt5工具栏和菜单
- VirtualBox在win10下安装一个国产深度os桌面系统的操作教程
- windowswps怎么以文件形式发送_手机WPS怎么以文件形式发送
- 网易云课堂解析_使用SQL分析网易云课堂职场提升类课程