原文地址: http://www.study-bbs.com/thread-30290-1-1.html
一、 UBIFS 简介
由IBM、nokia工程师Thomas Gleixner,Artem Bityutskiy等人于2006年发起,致力于开发性能卓越、扩展性高的FLASH专用文件系统,以解决当前嵌入式环境下以FLASH作为MTD设备使用时的技术瓶颈。
UBI:一种类似于LVM的逻辑卷管理层。主要实现损益均衡,逻辑擦除块、卷管理,坏块管理等。
UBIFS:基于UBI的FLASH日志文件系统。
有关ubifs的详细介绍,请参考:
http://www.linux-mtd.infradead.org/doc/ubi.html
http://www.linux-mtd.infradead.org/doc/ubifs.html
二、使用UBIFS前的准备
1. 配置linux内核
配置的时候选上
- 1)Device Drivers --->Memory Technology Device (MTD) support --->UBI - Unsorted block images --->Enable UBI
- 2)File systems --->Miscellaneous filesystems --->UBIFS file system support
这样我们的内核就支持UBIFS文件系统了
2. UBIFS工具
mtd-utils工具中提供了对UBIFS的支持,所以我们需要下载和 编译这些工具,下载以下几个文件
1)下载(mtd-utils、zlib、lzo)源码
- wget http://debian.mirror.inra.fr/deb ... 0080508.orig.tar.gz
- wget http://www.zlib.net/zlib-1.2.3.tar.gz
- wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
2)编译安装zlib
- tar xzvf zlib-1.2.3.tar.gz
- cd zlib-1.2.3
- make
- make install
- cd ..
3)编译安装lzo
- tar xzvf lzo-2.03.tar.gz
- cd lzo-2.03
- make
- make install
- cd ..
4)编译mtd-utils
- tar xzvf mtd-utils_20080508.orig.tar.gz
- cd mtd-utils-20080508
- make
mkfs.ubifs子目录下生成我们需要的mkfs.ubifs工具,通过这个工具我们能打包一个文件夹,生成UBIFS系统镜像
三、如何使用UBIFS
1) 制作根文件系统,比如我们的根文件目录为rootfs
2) 生成ubi烧写映像
- mkfs.ubifs -r rootfs -m 512 -e 15872 -c 7976 -o ubifs.img
3) 通过UBOOT制作UBI分区
目前最新的UBOOT已经支持UBI分区,进入UBOOT命令行
- jacob@myubu$> mtdparts default //加载默认分区表
我的分区表配置如下:
- #define MTDPARTS_DEFAULT "mtdparts=nandflash0:320k(bootloader)," /
- "64k(params)," /
- "3m(kernel)," /
- "-(root)"
- Uboot$> flash erase root //格式化分区,root为文件系统分区
- Uboot$> ubi part root //root分区作为ubi文件系统
- Uboot$> ubi create rootfs //创建UBI volume
- Uboot$> ubi write 0x30008000 rootfs 0x2f8000
现在UBI分区已经创建完毕,我们可以通过tftp等手段把ubifs.img下载到RAM中, 0x30008000 为下载的地址, 0x2f8000 为 长度,文件系统烧写完成,修改uboot中的内核启动参数为:
- #define CONFIG_BOOTARGS "ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs console=ttySAC0 mem=64M init=/linuxrc"
内核的下载没有什么变化,不在叙述,OK,工作到此结束,目前ubi文件已经移植到P1310上,工作正常。由于采用了压缩方式,UBI文件系统占用的空间比yaffs要小,而且避免了nand flash中OOB数据的操作,使得移植变