本文主要是介绍ubifs文件系统的制作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、背景
在Linux-2.6.27以前,谈到Flash文件系统,大家很多时候多会想到JFFS2、YAFFS2等文件系统,它们都是基于文件系统+mtd+flash设备的架构。linux-2.6.27后,内核加入了一种新型的flash文件系统UBI(Unsorted Block Images)。JFFS2、YAFFS2等专用文件系统存在着一些技术瓶颈,如:内存消耗大,对FLASH容量、文件系统大小、内容、访问模式等的线性依赖,损益均衡能力差或过渡损益等,在此背景下内核加入了UBI文件系统的支持。
2、内核配置
a、配置mtd支持UBI接口
Device Drivers —>Memory Technology Device (MTD) support —>UBI - Unsorted block images —>Enable UBIb、配置内核支持UBIFS文件系统
File systems —>Miscellaneous filesystems —>UBIFS file system support
3、制作UBIFS文件系统
3.1 获取相关参数
在制作UBI镜像时,需要首先确定以下几个参数:
MTD partition size; //对应的FLASH分区大小
flash physical eraseblock size; // FLASH物理擦除块大小
minimum flash input/output unit size; //最小的FLASH输入输出单元大小
for NAND flashes - sub-page size; //对于nand flash来说,子页大小
logical eraseblock size. //逻辑擦除块大小
这些参数可以通过以下三种方法获得:
(1)如果使用的是2.6.30以后的内核,这些信息可以通过工具从内核获得,如:mtdinfo –u。
(2)之前的内核可以通过以下方法:
MTD partition size:从内核的分区表或cat /proc/mtd获得
flash physical eraseblock size:从flash芯片手册中可以得到FLASH物理擦除块大小,或cat /proc/mtd
minimum flash input/output unit size:
1)nor flash:通常是1个字节
2)nand falsh:一个页面
sub-page size:通过flash手册获得
logical eraseblock size:对于有子页的NAND FLASH来说,等于“物理擦除块大小-1页的大小”
(3)也可以通过ubi和mtd连接时的产生的信息获取,如:
#modprobe ubi mtd=4 //ubi作为模块加载
或者
#ubiattach /dev/ubi_ctrl -m 4 //通过ubiattach关联MTD
UBI: attaching mtd4 to ubi0
UBI: physical eraseblock size: 131072 bytes (128 KiB)
UBI: logical eraseblock size: 129024 bytes
UBI: smallest flash I/O unit: 2048
UBI: sub-page size: 512
UBI: VID header offset: 512 (aligned 512)
UBI: data offset: 2048
UBI: attached mtd4 to ubi0
3.2 使用mkfs.ubifs工具制作文件系统
page_size_in_bytes = 2048 #ubi part Image; -->UBI: smallest flash I/O unit:2048 logical_erase_block_size = 126976 #ubi part Image; -->UBI: logical eraseblock size:126976 bytes patition_logical_blocks = 2047 #ubi part Image; -->UBI: number of good PEBs:399 "50MiB" mkfs.ubifs -x favor_lzo -m $(page_size_in_bytes) -e $(logical_erase_block_size) -c $(patition_logical_blocks) -r /home/rootfs -o /tftpboot/ubifs.img
-r:制定文件内容的位置
-m:页面大小
-e:逻辑擦除块大小
-c:逻辑擦除块数量
通过此命令制作的出的UBIFS文件系统镜像可在u-boot下使用ubi write命令烧写到NAND FLASH上。使用ubinize命令可将使用mkfs.ubifs命令制作的UBIFS文件系统镜像转换成可直接在FLASH上烧写的格式。通过此命令生成的ubi.img可直接使用NAND FLASH的烧写命令烧写到FLASH上。
ubinize -o ubi.img -m 2048 -p 128KiB -s 512 /home/ubinize.cfg
-p:物理擦除块大小
-s:最小的硬件输入输出页面大小
其中,ubinize.cfg的内容为:
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_size=100MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
4、烧写及启动
4.1 烧写
mmcinit
fatload mmc 0:1 81000000 ubi.img
nand unlock
nand ecc sw
nand erase 680000 7980000
nand write.i 81000000 680000 $(filesize)4.2 启动
setenv bootargs console=ttyS2,115200n8 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs
setenv bootcmd nand read.i 80300000 280000 200000;bootm 80300000
run bootcmd
这篇关于ubifs文件系统的制作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!