定义:无排序区块图像文件系统(Unsorted Block Image File System, UBIFS),主要适用于nand flash设备。

三个子系统:

  1. UBIFS文件系统
    可以理解为用户层,工作于UBI之上。
    比如我们设备中挂载可见的分区。

    /dev/ubi3_0              22616      3068     19548  14% /data
    
  2. UBI
    是MTD设备的高层次表示,一般用户层也可以在这里做开发定制,比如升级,通过ioctl控制MTD设备的读写。

  3. 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文件系统和镜像的制作及分区挂载说明相关推荐

  1. 紫枫术河 imx6 uboot的mtd分区总结(rootfs为ubi文件系统) imx6 uboot的mtd分区总结(rootfs为ubi文件系统)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_29729577/article/details/51130209 此文章基于U-Boot 20 ...

  2. 解压ubi文件_制作ubi文件系统

    制作 ubi 文件系统 目录 开发环境 ................................................................................ ...

  3. linux内核创建ubi,UBI文件系统制作和挂载

    关于参数可以参考attach的命令输出: root@ubuntu:~# ubiattach  /dev/ubi_ctrl -m 4 -d 0 UBI device number 0, total 40 ...

  4. linux设置分区读写属性,嵌入式Linux ubi文件系统制做、分区设置、只读文件系统,uboot启动参数root...

    当前平台, 基于君正的X10000平台的嵌入式Linux 系统linux 0  目的ubuntu 我要设置根文件系统为可读写, 设置data分区上的文件系统为只读学习 1 设置各文件系统的读写属性sp ...

  5. UBI 文件系统移植 sys 设备信息【转】

    转自:http://blog.chinaunix.net/uid-25304914-id-3058647.html cat /sys/class/misc/ubi_ctrl/dev --------- ...

  6. UBI文件系统(转)

    UBI-Unsorted Block Imagine http://www.linux-mtd.infradead.org/doc/ubi.html 1.注意 很多人搞不清楚UBI到底是什么,这就是写 ...

  7. UBI文件系统遇到的问题

    0.  ubifs_iget: failed to read inode 1, error -22 经常是由于没有写全整个数据,最好检测下写入的数据大小是否对,尤其是通过环境变量 filesize 去 ...

  8. Hi3516A开发-- UBI 文件系统使用指南

    这篇文章在 Hi3516A V100R001C01SPC050\02.Only for Reference\02.software\documents_cn\UBI 文件系统使用指南.pdf 拿出来只 ...

  9. android 镜像文件制作

    一:update.zip包的制作    1:新建一个目标,在此目录下准备好需要的文件,如system目录文件.boot.img.recovery.img等.      mkdir testupdate ...

最新文章

  1. [ACM] hdu 1253 胜利大逃亡 (三维BFS)
  2. go文件服务器mimetype,网络:什么是 MIME TYPE?
  3. BZOJ2299 HAOI2011向量(数论)
  4. 基于暗通道优先算法的去雾应用Matlab
  5. 【NLP】全面详解 | 深度学习中的注意力机制(一)
  6. 转 框架页有Frame、Iframe、Frameset 3个标记,初学者容易将三者混淆,下面分别讲解三者的区别。...
  7. nodejs匿名函数
  8. 27、jdbc操作数据库(4)
  9. idea怎么将本地文件和远程git对比_IDEA新建本地项目关联远程git仓库
  10. 仪表板断面_【干货】内外饰断面设计规范
  11. LLVM Bitcode File Format - LLVM 比特流文件格式
  12. PHP两个日期之间的所有日期
  13. 读书笔记——实时渲染(一)
  14. Chrome和360浏览器“无法翻译此网页”解决方法
  15. 战争调度(树形DP+BFS)
  16. 查询水果价格(15 分)
  17. 通用流量办什么卡划算?告诉你三大运营商该如何选择?
  18. ORA-12170:TNS:连接超时错误处理
  19. Word 排版:插入题注和引用题注
  20. Oracle报错宗介

热门文章

  1. 中国十大穷光蛋排行榜
  2. 一个优秀的程序员应该如何提高工作效率?
  3. 经典面试题(39):以下代码将输出的结果是什么?
  4. 监督学习 | 集成学习 之AdaBoost、梯度提升及Slearn实现
  5. 在线WGCNA分析 (直接出交互式结果报告)
  6. php图片长宽处理,用php调整图片宽高 | 学步园
  7. python gui界面实例_Python界面(GUI)编程PyQt5工具栏和菜单
  8. VirtualBox在win10下安装一个国产深度os桌面系统的操作教程
  9. windowswps怎么以文件形式发送_手机WPS怎么以文件形式发送
  10. 网易云课堂解析_使用SQL分析网易云课堂职场提升类课程