YAFFS 中是从头到尾对块搜索,所以在垃圾收集上 JFFS 的速度慢,但是能延长 NAND 的寿命。
3 )、 JFFS 支持文件压缩,适合存储容量较小的系统; YAFFS 不支持压缩,更适合存储容量大的系统。
YAFFS 还带有 NAND 芯片驱动,并为嵌入式系统提供了直接访问文件系统的 API ,用户可以不使用 Linux 中的 MTD 和 VFS ,直接对文件
进行操作。 NAND Flash 大多采用 MTD+YAFFS 的模式。 MTD ( Memory Technology Devices ,内存技术设备)是对 Flash 操作的
接口,提供了一系列的标准函数,将硬件驱动设计和系统程序设计分开。
YAFFS2 是 YAFFS 的升级版,能更好的支持 NAND FLASH 。
2.4.1 yaffs2文件系统制作工具 mkyaffs2image
1. android yaffs2 源代码 external/yaffs2/
2. 从网上下载 yaffs2 源码
下载:
下载:
//点击左下角的 Download tarball 下整个tar包
cvs下载:
export CVSROOT=:pserver:anonymous@cvs.aleph1.co.uk:/home/aleph1/cvs cvs logon
cvs co yaffs2
tar -xvf yaffs2.tar.bz;cd yaffs2;make
- 必须sudo make,否则提示如下错误(但使用本文介绍的方法,我并没有在ubuntu 10.04实验通过)
-
luther@gliethttp:~/yaffs2$
-
make -C /lib/modules/2.6.32-24-generic/build M=/home/luther/Desktop/yaffs2 modules
-
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-24-generic'
-
/usr/src/linux-headers-2.6.32-24-generic/arch/x86/Makefile:81: stack protector enabled but no compiler support
-
CC [M] /home/luther/Desktop/yaffs2/yaffs_mtdif.o
-
Assembler messages:
-
Error: unknown architecture `i586'
-
-
Error: unrecognized option -march=i586
-
cc1: error: unrecognized command line option "-mregparm=3"
-
cc1: error: bad value (i586) for -march switch
-
make[2]: *** [/home/luther/Desktop/yaffs2/yaffs_mtdif.o] Error 1
-
make[1]: *** [_module_/home/luther/Desktop/yaffs2] Error 2
-
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-24-generic'
-
make: *** [modules] Error 2
-
-
使用sudo可以正常编译通过
-
luther@gliethttp:~/yaffs2$ sudo make
-
make -C /lib/modules/2.6.32-24-generic/build M=/home/luther/yaffs2 modules
-
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-24-generic'
-
CC [M] /home/luther/yaffs2/yaffs_mtdif.o
-
CC [M] /home/luther/yaffs2/yaffs_mtdif2.o
-
CC [M] /home/luther/yaffs2/yaffs_mtdif1.o
-
CC [M] /home/luther/yaffs2/yaffs_packedtags1.o
-
CC [M] /home/luther/yaffs2/yaffs_ecc.o
-
CC [M] /home/luther/yaffs2/yaffs_fs.o
-
CC [M] /home/luther/yaffs2/yaffs_guts.o
-
/home/luther/yaffs2/yaffs_guts.c:1712: warning: ‘yaffs_DeleteWorker’ defined but not used
-
/home/luther/yaffs2/yaffs_guts.c:612: warning: ‘yaffs_VerifyTnodeWorker’ defined but not used
-
CC [M] /home/luther/yaffs2/yaffs_packedtags2.o
-
CC [M] /home/luther/yaffs2/yaffs_qsort.o
-
CC [M] /home/luther/yaffs2/yaffs_tagscompat.o
-
CC [M] /home/luther/yaffs2/yaffs_tagsvalidity.o
-
CC [M] /home/luther/yaffs2/yaffs_checkptrw.o
-
CC [M] /home/luther/yaffs2/yaffs_nand.o
-
LD [M] /home/luther/yaffs2/yaffs2.o
-
Building modules, stage 2.
-
MODPOST 1 modules
-
CC /home/luther/yaffs2/yaffs2.mod.o
-
LD [M] /home/luther/yaffs2/yaffs2.ko
-
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-24-generic
为ubuntu 8.10 添加yaffs文件系统支持
sudo mkdir -p /lib/modules/2.6.27-4-generic/kernel/fs/yaffs2
sudo cp yaffs2.ko /lib/modules/2.6.27-4-generic/kernel/fs/yaffs2/
sudo insmod /lib/modules/2.6.27-4-generic/kernel/fs/yaffs2/yaffs2.ko
制作yaffs2文件系统
mkyaffs2image /nfsroot/rootfs/system system.img
/nfsroot/rootfs/system 为文件系统所在的目录 system.img 为生成的镜像文件
2.4.2 在pc上挂载yaffs2文件系统
sudo mkdir -p /mnt/mtd/yaffs2
sudo modprobe mtdblock
sudo modprobe mtdram total_size=100000 erase_size=256
sudo insmod /lib/modules/2.6.27-4-generic/kernel/fs/yaffs2/yaffs2.ko
sudo dd if=rootfs.yaffs2 of=/dev/mtdblock0
sudo mount -t yaffs2 /dev/mtdblock0 /mnt/mtd/yaffs2
#modprobe mtdram total_size=49152 erase_size=128
阅读(6670) | 评论(0) | 转发(0) |