基于 S3C2410 上的 Yaffs 文件系统制作
Yaffs(Yet Another Flash File System)文件系统是专门针对 NAND 闪存设计的嵌入式文件系
统,目前有 YAFFS 和 YAFFS2 两个版本,两个版本的主要区别之一在于 YAFFS2 能够更好的支持大容量
的 NAND FLASH 芯片。这也就是我的系统加载 YAFFS2 时给我主动切换到 YAFFS1 的原因,YAFFS 文件系
统会根据你的 NAND Flash 的页面的大小来主动的配置你是使用 YAFFS1 还是 YAFFS2。
目前支持 FLASH 的文件系统还有 JFFS 和 JFFS2,JFFS 和 JFFS2 对 NOR Flash 的支持还是非常好
的,是基于日志的文件系统。具体的介绍请查看相关文件。
与 NOR 相比,NAND 不是完全可靠的,每块芯片出厂时都有一定比例的坏块存在,对数据的存取
不是使用地址映射而是通过寄存器的操作,串行存取数据。
NAND Flash 上的 YAFFS 文件系统主要包含两个部分,一个部分是 NAND Flash 上的 MTD 的驱动,
另一个是 YAFFS 文件系统的支持。其中 YAFFS 的文件系统与硬件的相关性比较小,我们先完成内核对
YAFFS 文件系统的支持。
1 内核支持 YAFFS 文件系统
首先通过 CVS 来获得 YAFFS2 的源代码。
export CVSROOT=:pserver:anonymous@cvs.aleph1.co.uk:/home/aleph1/cvs
cvs logon
cvs checkout yaffs2
下载下来源码之后,在根目录下存在一个 patch-ker.sh,这是一个给 linux 打补丁的脚本,打
上这个补丁之后,内核的源代码就支持 yaffs2 了,我们来看一下这个脚本的最后部分。脚本中每个命
令行必须以 TAB 键开始,这是基本常识。
YAFFSDIR=$LINUXDIR/fs/yaffs2
if [ -e $YAFFSDIR ]
then
echo "$YAFFSDIR exists, not patching"
else
mkdir $LINUXDIR/fs/yaffs2
cp Makefile.kernel $LINUXDIR/fs/yaffs2/Makefile
cp Kconfig $LINUXDIR/fs/yaffs2
cp *.c *.h $LINUXDIR/fs/yaffs2
fi
这实际上就是在 kernel/fs 下建立了一个 yaffs2 的文件系统,然后将所有需要的文件拷贝到该
目录下。
那么我们来看 fs 目录下的 kconfig 文件有什么变化。
# Patched by YAFFS
source "fs/yaffs2/Kconfig"
config JFFS_FS
tristate "Journalling Flash File System (JFFS) support"
depends on MTD
help
JFFS is the Journaling Flash File System developed by Axis
Communications in Sweden, aimed at providing a crash/powerdown-safe
有疑问请联系 ty3247@163.com(23012675) 欢迎大家一起讨论、共同进步!