编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

UBIFS 根文件系统制作(如何制作根文件系统)

wxchong 2024-10-07 17:06:06 开源技术 19 ℃ 0 评论

1. UBIFS 文件系统简介

传统的flash文件系统如jffs2, yaffs2等是工作在MTD 设备上,而UBIFS则建立在UBI卷层之上,UBI卷层工作在MTD设备层之上,也可以说,UBIFS涉及三个子系统:

  • MTD 子系统,提供对flash芯片Raw的访问接口。MTD子系统提供了MTD device的概念,比如/dev/mtdX(字符设备)和/dev/mtdblockX(块设备);
  • l UBI Subsystem, 它工作在MTD设备之上,提供了UBI逻辑卷,对上层屏蔽了一些直接使用MTD设备需要处理的问题,如wear-leveling(磨损平衡)和volume management(坏块管理)功能等;
  • l UBIFS 文件系统,工作于UBI之上。它提供文件的open, read, write等操作;


2.根文件系统镜像文件制作

  • l mkfs.ubifs 参数说明

-x lzo 指定使用lzo压缩方法,默认是lzo, 还支持zlib, zlib的压缩率高,但是lzo压缩解压速度快。

-m 2048 Nand Flash的最小读写单元,一般为page size.

-r ./rootfs 指定根文件系统目录树的路径

-o rootfs.ubifs 指定制作出的根文件系统镜像文件名

-e 126976 指定LEB(Logical Erase Block, 逻辑擦除块)大小。Nandflash 读写单位为页,擦除单位为块,以ESMT F59L1G81MB 为例:一个PEB(Physical EraseBlockSize, 物理擦除块)大小就是2048*64=131072,-e 的算法是物理擦除块大小-2*页大小,这里就是131072-2*2048=126976(注:这里的擦除块大小都不包含oob, 有包含子页和不包含子页之分。)

-c xxx 指定该分区最大逻辑擦除块数量,该值随着根文件系统分区的大小和该分区的坏块数调整。


  • l ubinize 参数说明

-o rootfs-ubifs.bin 指定ubinize处理后输出的image文件名,该文件可以由u-boot的nand write命令直接烧录;

-m 2048 指定minimum input/output unit 大小,为Nandflash的页大小;

-p 131072 指定物理擦除块大小:64 Pages * 2048 Byte/Page = 131072(不包含oob的大小)

-s 512/2048 指定sub-page-szie大小,如果有sub-page, 则配置为512;如果没有sub-page,则配置为2048


  • n 关于配置文件说明:

image=rootfs-ubifs.img 指定mkfs.ubifs 制作成的根文件系统镜像文件路径;

vol_id=0 指定根文件系统树的卷标为0,u-boot的bootargs参数需要根据它来设置;

vol_size=xxx 指定该UBI逻辑卷的大小,该值计算公式一般为 逻辑擦除块大小*逻辑擦除块个数该值一般不用写,默认值是image大小。写了这个作用是帮助检查image是否超过了分区限制,制作时候就会提示,否则mount会出错。逻辑擦除块个数的值是经过计算的最大值(前面mkfs.ubifs -c 指定的值)不过volume flag autoresize 参数会自适应大小,不会浪费空间,后面Linux 系统内核启动过程中可以看到这个现象。

vol_type=dynamic

vol_name=xxx 指定UBI Volume的名称,u-boot的bootargs参数需要根据它来设置;

vol_flags=autoresize UBI Subsystem 在系统启动时自动调整逻辑擦除块的个数;


经过ubinize 命令处理过后的根文件系统镜像rootfs-ubifs.bin就可以直接在u-boot使用

nand write 命令烧录到相应的根文件系统分区上去了。

  • 关于Minim Flash input/output, sub-pages, UBI Header的说明:
http://www.linux-mtd.infradead.org/doc/ubi.html#L_min_io_unit

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表