我的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/每秒
分享到:
相关推荐
1.工具链安装包是: 2.e2fsprogs的编译安装(必要否则会报错cannot find -luuid) 3.Lzo的编译安装 4.Zlib的编译安装 5.mtd-utils的编译安装 附:另一篇文件:注重讲解mtd-util的使用
mtd-utils-2.0.2.tar.bz2 在使用openwrt进行编译的时候很容易出现下载 mtd-utils-2.0.2.tar.bz2 失败,那么就将该资源下载后放到openwrt/dl/文件夹下面
mtd-utils-arm
mtd-utils-05.07.23.tar.bz2是MTD设备的工具包,编译它生成mkfs.jffs2工具,用它来将一个目录制作成jffs2文件系统映像. 这个工具包需要zlib压缩包,需要有zlib源码zlib-1.2.3.tar.gz
mtd-utils-1.5.0.tar.bz2,编译ubinize
最新的mtd-utils,要的下载, mtd-utils是MTD设备的工具包,编译它生成mkfs.jffs2工具,用它来将一个目录制作成jffs2文件系统映像
到三个工具,分别是:lzo-2.03.tar.gz 、zlib-1.2.3.tar.bz2 、mtd-utils-1.2.0.tar.bz2 安装的过程如下: 1、首先创建工具的安装目录。 #mkdir /build_dir/build_jffs2 #cd /build_dir/build_jffs2 将上述三个工具...
修改后的mtd-utils-1.5.2,用于在ubuntu16,18,19中可以正常编译和交叉编译,可以替换Hi3518E_SDK_V1.0.4.0中的mtd-utils-1.5.0使得sdk编译无错
ubifs 的相关工具制作和使用,已经验证完全能够在atmel91sam9g45平台运行起来。
mtd-utils 嵌入式nandflash文件系统jffs2制作工具,编译方法见我的csdn博客 构建根文件系统
最近在搞嵌入式linux运行下自动升级系统zImage,rootfs镜像等,需要用到mtd工具,下载了mtd-utils许多的版本,最后编译通过,拷贝到板子上使用,升级系统成功了
mtd-utils-1.5.2.tar.bz2,海思SDK编译所需工具
mtd-utils_2.0.0.orig.tar.gz 搭建海思Hi3516A开发环境到成功编译osdrv整个目录走过的坑
用交叉编译工具链arm-linux-gnueabihf编译好的MTD工具(mtd-utils)含jffs2、ubifs; 编译所需依赖库文件: zlib-1.3.tar.gz lzo-2.10.tar.gz e2fsprogs-1.47.0 libuuid-1.0.3.tar.gz mtd-utils-2.1.6.tar.bz2 ...
交叉编译mtd-utils工具(linux下flash工具)定义.pdf
该mtd-utils-2005工具为添加过lzb.a的,不需要再添加libz相关的东西,可直接编译通过。 以前在网上也找了好多资料,只是每次下载下来都不能直接编译通过,来时一大堆的错误,真缺德啊! 这个大家下载下来之后可以...
mtd块设备操作工具源码,直接修改交叉编译工具即可编译使用。
使用mtd-utils工具在高通android O/P平台测试nor-spi flash, 编译移植通过。
mtd-utils-1.4.5.tar.gz,openwrt编译过程中需要用到。
文章中详细记录了我自己编译安装生成mtd工具的整个过程,并进行测试是可以使用的。