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

转自http://blog.21ic.com/user1/6977/archives/2010/77562.html

 

 

 

 

 我的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 <sys/xattr.h>
    #i nclude <sys/acl.h>
#endif
    #i nclude <byteswap.h>
    #define crc32 __zlib_crc32
    #i nclude <zlib.h>
#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/每秒

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值