ubifs文件系统的制作详解(6)

2019-08-31 16:45

logical_pages_per_block=`expr $pages_per_block - 2`

logical_erase_block_size=`expr $page_size_in_bytes /* $logical_pages_per_block` echo \[$logical_erase_block_size]bytes.\

#Block size = page_size * pages_per_block

block_size=`expr $page_size_in_bytes /* $pages_per_block` echo \[$block_size]bytes.\

#physical blocks on a partition = partition size / block size

partition_physical_blocks=`expr $partition_size_in_bytes / $block_size`

echo \[$partition_physical_blocks]\

#Logical blocks on a partition = physical blocks on a partitiion - reserved for wear level patition_logical_blocks=`expr $partition_physical_blocks - $wear_level_reserved_blocks` echo \[$patition_logical_blocks]\

#File-system volume = Logical blocks in a partition * Logical erase block size fs_vol_size=`expr $patition_logical_blocks /* $logical_erase_block_size` echo \[$fs_vol_size]bytes.\ echo

echo \echo \> $config_file echo \

echo \echo \

echo \echo \echo \echo

# Note: Check necessary program for installation

#echo -n \#check_program mkfs.ubifs ubinize #echo \

#Generate ubifs image echo -n \

./mkfs.ubifs -x lzo -m $page_size_in_bytes -e $logical_erase_block_size -c $patition_logical_blocks -o rootfs_ubifs.img -d $path_to_rootfs check_result

echo -n \

./ubinize -o ubi.img -m $page_size_in_bytes -p $block_size -s $page_size_in_bytes $config_file -v

check_result

rm -f rootfs_ubifs.img rm -f $config_file

(4)将mkfs.ubifs和ubinize以及create-ubifs.sh放置在同一目录下,然后调用create-ubifs.sh即可创建ubifs文件系统,create-ubifs.sh用法如下:

create-ubifs.sh page_size_in_bytes(页大小) pages_per_block(每个扇区的页数量)

partition_size_in_bytes(分区大小) blocks_per_device(扇区数量) path_to_rootfs(文件系统路径) 举例如下:

./create-ubifs.sh 2048 64 83886080 4096 ./rootfs

上面命令的意思是调用create-ubifs.sh将当前目录下的rootfs文件夹的内容制作成ubifs文件系统,nand flash的页大小为2k,每个扇区有64页,

总共有4096个扇区,要制作的文件系统的大小为83886080字节。

第一、什么是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? 第三、如何得到ubifs?

2.6.22以后,ubifs活跃于git管理工程中:

git://git.infradead.org/ubi-2.6.git

2.6.27以后,ubifs被整合进内核树中,用户只需下载最新内核即可获取ubifs支持。 第四、如何使用ubifs? 软件环境: linux-2.6.28

arm-linux-gcc 3.4.5 硬件环境: s3c2410 k9f1208 一、准备 1、内核 配置的时候选上

1)Device Drivers --->Memory Technology Device (MTD) support --->UBI - Unsorted block images --->Enable UBI

2)File systems --->Miscellaneous filesystems --->UBIFS file system support 2、mtd-utils工具(flash_eraseall、ubiattach、ubimkvol)准备 1)下载(mtd-utils、zlib、lzo)源码

wget http://debian.mirror.inra.fr/debian/pool/main/m/mtd-utils/mtd-utils_20080508.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

CC=arm-linux-gcc ./configure --shared --prefix=/usr/local/arm/3.4.5/arm-linux make

make install

cd ..

3)编译安装lzo

tar xzvf lzo-2.03.tar.gz cd lzo-2.03

CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/usr/local/arm/3.4.5/arm-linux make

make install cd ..

4)编译mtd-utils

tar xzvf mtd-utils_20080508.orig.tar.gz cd mtd-utils-20080508 修改Makefile文件: #CROSS=arm-linux-

修改为 CROSS=arm-linux- BUILDDIR := $(CROSS:-=) 修改为 BUILDDIR := .

修改ubi-utils/Makefile文件: 添加 CROSS=arm-linux-

修改 ubi-utils/new-utils/Makefile文件: 添加 CROSS=arm-linux-

make WITHOUT_XATTR=1

ubi-utils子目录下生成我们需要的ubiattach、ubimkvol等文件(请确保是交叉编译所得) 3、mtd-utils工具(mkfs.ubifs、ubinize)准备 git-clone git://git.infradead.org/mtd-utils.git

cd mtd-utils/ make

mkfs.ubifs子目录下生成我们需要的mkfs.ubifs工具 ubi-utils/new-utils子目录下生成我们需要的ubinize工具 二、使用

1、使用ramfs或nfs启动系统,执行以下命令挂载ubifs:

1)flash_eraseall /dev/mtd4 2)ubiattach /dev/ubi_ctrl -m 4

3)ubimkvol /dev/ubi0 -N rootfs -s 50MiB

4)mount -t ubifs ubi0_0 /mnt或mount -t ubifs ubi0:rootfs /mnt 2、如果你想使用ubifs为rootfs,把文件系统内容解压到ubifs挂载目录下,并修改内核启动参数为: console=ttySAC0 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs

3、如果你想直接在bootloader下烧写ubifs映像,使用以下命令制作ubi烧写映像: mkfs.ubifs -r rootfs -m 512 -e 15872 -c 3303 -o ubifs.img ubinize -o ubi.img -m 512 -p 16KiB -s 256 ubinize.cfg 其中:

1)以上命令的参数可从ubifs挂载信息中提取:

UBI: attaching mtd4 to ubi0 UBI: physical eraseblock size: 16384 bytes (16 KiB) UBI: logical eraseblock size: 15872 bytes UBI: smallest flash I/O unit: 512 UBI: sub-page size: 256 UBI: VID header offset: 256 (aligned 256) UBI: data offset: 512 UBI: attached mtd4 to ubi0 2)配置文件ubinize.cfg的内容为: [ubifs] mode=ubi

image=ubifs.img vol_id=0

vol_size=50MiB vol_type=dynamic vol_name=rootfs vol_flags=autoresize 注:

其他nand flash下ubifs的使用方法类似(参数不同)。

=============================================================================

UBI文件系统简介 作者:

刘洪涛,华清远见嵌入式学院 金牌讲师。

linux-2.6.27以前,谈到Flash文件系统,大家很多时候多会想到cramfs、jffs2、yaffs2等文件系统。它们也都是基于文件系 统+mtd+flash设备的架构。linux-2.6.27后,内核加入了一种新型的flash文件系统UBI(Unsorted Block Images)。这里简单介绍下UBI文件系统加入的原因,及使用方法。我也是刚接触到这个文件系统,可能有理解不对的地方,也请指正。 一、产生的背景

FLASH具有的“先擦除再写入”、坏块、“有限的读写次数”等特性,目前管理FLASH的方法主要有: 1、采

用MTD+FTL/NFTL(flash 转换层/nand flash转换层)+

传统文件系统,如:FAT、ext2等。FTL/NFTL的使用就是针对FLASH的特有属性,通过软件的方式来实现日志管理、坏块管理、损益均衡等技

术。但实践证明,由于知识产权、效率等各方面因素导致本方案有一定的局限性。

2、采用硬件翻译层+传统文件系统的方案。这种方法被很多存储卡产品采用,如:SD卡、U盘等。这种方案对于一些产品来说,成本较高。

3、采用MTD+ FLASH专用文件系统,如JFFS1/2,YAFFS1/2等。它们大大提高了FLASH的管理能力,并被广泛应用。

JFFS2、YAFFS2等专用文件系统也存在着一些技术瓶颈,如:内存消耗大,对FLASH容量、文件系统大小、内容、访问模式等的线性依赖,损益均衡能力差或过渡损益等。在此背景下内核加入了UBI文件系统的支持。 二、用法

环境:omap3530处理器、 (128MByte 16 位NAND Flash) 、linnux-2.6.28内核

1、配置内核支持UBIFS

Device Drivers --->Memory Technology Device (MTD) support --->UBI - Unsorted block images --->Enable UBI 配置mtd支持UBI接口

File systems --->Miscellaneous filesystems --->UBIFS file system support 配置内核支持UBIFS文件系统


ubifs文件系统的制作详解(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:和差倍问题专项练习题2

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: