Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48542
  • 博文数量: 9
  • 博客积分: 290
  • 博客等级: 二等列兵
  • 技术积分: 108
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-04 18:28
文章分类

全部博文(9)

文章存档

2012年(3)

2011年(6)

我的朋友

分类: LINUX

2011-09-04 19:28:59


     从网上看来的,很有用的一个帖子http://www.cnitblog.com/luofuchong/archive/2009/03/11/55259.aspx

第一、什么是ubifs?

由IBM、nokia工程师Thomas Gleixner,Artem Bityutskiy等人于2006年发起,致力于开发性能卓越、扩展性高的FLASH专用文件系统,以解决当前嵌入式环境下以FLASH作为MTD设备使用时的技术瓶颈。

关键字:
UBI:一种类似于LVM的逻辑卷管理层。主要实现损益均衡,逻辑擦除块、卷管理,坏块管理等。
UBIFS:基于UBI的FLASH日志文件系统。

有关ubifs的详细介绍,请参考:




第二、为何使用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
wget
wget

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的使用方法类似(参数不同)。

我的学习过程
因为对uboot中的ubi支持不熟悉,先从内核这边入手。
1.首先,先在内核中加入ubifs的支持。
配置的时候选上
1)Device Drivers  --->Memory Technology Device (MTD) support  --->UBI - Unsorted block images  --->Enable UBI
2)File systems  --->Miscellaneous filesystems  --->UBIFS file system support

2.使用
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 (但是我在使用时出现了mount: unknown filesystem type 'ubifs',后发现这一步错误的原因是原来 内核中定义的分区名称不符合,我的是jffs2-nand而不是rootfs)
修改后为:
3)ubimkvol /dev/ubi0 -N jffs2-nand -s 241MiB
4)mount -t ubifs ubi0:jffs2-nand /temp

执行
2)ubiattach /dev/ubi_ctrl -m 4
[  191.400085] UBI: attaching mtd4 to ubi0
[  191.404083] UBI: physical eraseblock size:   131072 bytes (128 KiB)
[  191.410705] UBI: logical eraseblock size:    129024 bytes
[  191.416625] UBI: smallest flash I/O unit:    2048
[  191.421691] UBI: sub-page size:              512
[  191.426483] UBI: VID header offset:          512 (aligned 512)
[  191.432586] UBI: data offset:                2048
[  192.451690] UBI: empty MTD device detected
[  192.456573] UBI: max. sequence number:       0
[  192.461425] UBI: create volume table (copy #1)
[  192.474548] UBI: create volume table (copy #2)
[  192.498596] UBI: attached mtd4 to ubi0
[  192.502624] UBI: MTD device name:            "jffs2-nand"
[  192.508270] UBI: MTD device size:            248 MiB
[  192.513397] UBI: number of good PEBs:        1983
[  192.518341] UBI: number of bad PEBs:         5
[  192.523010] UBI: number of corrupted PEBs:   0
[  192.527618] UBI: max. allowed volumes:       128
[  192.532440] UBI: wear-leveling threshold:    4096
[  192.537292] UBI: number of internal volumes: 1
[  192.542205] UBI: number of user volumes:     0
[  192.546844] UBI: available PEBs:             1960
[  192.551727] UBI: total number of reserved PEBs: 23
[  192.556732] UBI: number of PEBs reserved for bad PEB handling: 19
[  192.563079] UBI: max/mean erase counter: 0/0
[  192.567504] UBI: image sequence number:  1509517332
[  192.573974] UBI: background thread "ubi_bgt0d" started, PID 1818
UBI device number 0, total 1983 LEBs (255854592 bytes, 244.0 MiB), available 1960 LEBs (252887040 bytes, 241.2 MiB), LEB size 129024 bytes (126.0 KiB)

3.解压要烧写的根文件系统到flash中
root@am3517-evm:/tempd# busybox tar xjf /base-rootfs-am3517-evm.tar.gz 

4.修改启动参数重新启动系统(ecc错误启动不成功)
setenv bootargs mem=256M console=ttyO2,115200n8 noinitrd ip=off    omap_vout.vid1_static_vrfb_alloc=y rw ubi.mtd=4,512 rootfstype=ubifs root=ubi0:jffs2-nand rootdelay=2 vram=8M omapfb.vram=0:8M


阅读(4253) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:UBI镜像制作

给主人留下些什么吧!~~