Chinaunix首页 | 论坛 | 博客
  • 博客访问: 191291
  • 博文数量: 49
  • 博客积分: 1756
  • 博客等级: 上尉
  • 技术积分: 602
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-27 16:46
文章分类

全部博文(49)

文章存档

2014年(1)

2013年(17)

2012年(10)

2011年(5)

2010年(16)

我的朋友

分类: LINUX

2011-10-12 15:59:04

我的mtd-utils工具链编译过程

 我的AT91SAM9G20系统,板上集成了256M字节的NAND FLASH ;原来是使用JFFs2的,使用一段时间后发现,
当数据写得比较多时,例如MTDBLOCK2的分区大小为220M,当写了164M字节的数据时,这时候每次上电,JFFS2的文件系统,jffs2_gcd_mtd2的线程需要花差不多40秒的
时间去做垃圾回收的工作,更要命的是在垃圾回收的这段时间,占的资源接近100%,也就是说差不多40秒内,其他的线程基本上,没有机会运行了


所以我们决定使用UBI文件系统,但是UBI文件系统需要个工具,这个工具叫mtd-utils


其实网上有几个关于UBI移植的文章。我也是参照他们来做的,但是走了一些不应该走的弯路;当然也学习了一些额外的知识


我的linux编译器为: arm-none-linux-gnueabi 编译器的位置为: /usr/local/arm-2007q1

编译mtd-utils ,除了需要mtd-utils的源码外,还需要lzo-2.03  和 zlib-1.2.3这2个库文件;


下载这文件到你的机器上,在那个位置都可以;


1.安装lzo-2.03 
用 tar -xzvf 命令解压缩

输入如下命令:
CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/usr/local/arm-2007q1/arm-none-linux-gnueabi
make
make install


注意我的机器是使用arm-none-linux-gnueabi-gcc 这个工具链的;
还有就是前面的那个CC 是大写的;写出小写的话,编译出来的库文件是基于PC而不是ARM的
后面的是编译器的路径;路径中不要加什么BIN之类的文件夹,否则会报找不到头文件,需要修改Makefile,强行指定路径


2.安装zlib-1.2.3
用 tar -xzvf 命令解压缩
CC=arm-none-linux-gnueabi-gcc ./configure --shared --prefix=/usr/local/arm-2007q1/arm-none-linux-gnueabi
make
make install


安装事项同样参考1


编译mtd-utils
用 tar -xzvf 命令解压缩

make CROSS=arm-none-linux-gnueabi- WITHOUT_XATTR=1

 

CROSS=arm-none-linux-gnueabi-   指定ARM编译器的路径

WITHOUT_XATTR=1  是应为mtd-utils中有些源码使用了zlib.h中的库文件而不使用acl.h的库文件

如下面 (mkfs.jfFs2.c):


#ifndef WITHOUT_XATTR
    #i nclude
    #i nclude
#endif
    #i nclude
    #define crc32 __zlib_crc32
    #i nclude
#undef crc32 


编译后,在mtd-utils/arm-none-linux-gnueabi/ubi-utils的文件夹中

找到需要的工具: ubiattach、ubiformat、ubimkvol等


把这些工具复制到目标板上 

 

在AT91SAM9G20上运行时,需要保证板子上的内核是否打开了UBI文件系统

进入内核的文件夹,输入make menucofig

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

 

在“Miscellaneous filesystems”菜单下,
 选中“UBIFS file system support”,
           “Extended attributes support”,
     “Advanced compression options”,
             “LZO compression support”,
      “ZLIB compression support”五项,
以使内核支持 UBIFS。


下面把mtdblock2 作为ubifs文件系统挂载起来

在控制台中输入:


1.
flash_eraseall /dev/mtd2

把MTD2的FLASH擦除

 

2.
格式化FLASH
./ubiformat /dev/mtd2 -s 512


mtd2 对应是FLASH分区 MTDBLOCK2
-s 512  是我的板子的海量存储器不支持子页功能,所以必须指定为 为512字节;否则使用默认的2048字节

在ubiatached 是会报错

执行了步骤1后,2不需要运行

3.
将第二分区附着至ubi0上
./ubiattach /dev/ubi_ctrl -m 2

-m 2    指把mtdblock2     关联到ubi0

4.
建立卷标
./ubimkvol /dev/ubi0 -N rootfs -s 200MiB

这一步并非单纯是给文件系统命名的意思,它还担负了指定分区大小、建立ubi0_0这个东东

不做这一步。下一步操作不能进行的


5.
最后1步,挂载ubi文件系统,上面N步工作都是为这步结果的

mount -t ubifs ubi0_0 /mnt

需要注意:
ubi0_0   是使用ubimkvol建立的卷标,并不需要加上  /dev/ubi0_0  
虽然/dev 下也存在ubi0_0这个设备


跟新了文件系统后,使用FTP下载文件到目标板上,速度比原来的JFFS2要快很多


达到3M字节/秒,以前使用JFFS2也就600多K/每秒

 

 

 

 

 

 

 

 

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

上一篇:ubi以及ubifs

下一篇:UBI 文件烧写

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