一、YAFFS文件系統簡介
YAFFS,Yet Another Flash File System,是一種類似于JFFS/JFFS2的專門為Flash設計的嵌入式文件系統。與JFFS相比,它減少了一些功能,因此速度更快、占用內存更少。
YAFFS和JFFS都提供了寫均衡,垃圾收集等底層操作。它們的不同之處在于:
(1)、JFFS是一種日志文件系統,通過日志機制保證文件系統的穩定性。YAFFS僅僅借鑒了日志系統的思想,不提供日志機能,所以穩定性不如JAFFS,但是資源占用少。
(2)、JFFS中使用多級鏈表管理需要回收的臟塊,并且使用系統生成偽隨機變量決定要回收的塊,通過這種方法能提供較好的寫均衡,在YAFFS中是從頭到尾對塊搜索,所以在垃圾收集上JFFS的速度慢,但是能延長NAND的壽命。
(3)、JFFS支持文件壓縮,適合存儲容量較小的系統;YAFFS不支持壓縮,更適合存儲容量大的系統。
YAFFS還帶有NAND芯片驅動,并為嵌入式系統提供了直接訪問文件系統的API,用戶可以不使用Linux中的MTD和VFS,直接對文件進行操作。NAND Flash大多采用MTD+YAFFS的模式。MTD( Memory Technology Devices,內存技術設備)是對Flash操作的接口,提供了一系列的標準函數,將硬件驅動設計和系統程序設計分開。
二、YAFFS文件系統的移植
yaffs代碼可以從http://www.aleph1.co.uk/armlinux/projects/下載(yaffs代碼包括yaffs_ecc
.c,yaffs_fileem.c,yaffs_fs.c,yaffs_guts.c,yaffs_mtdif.c,yaffs_ramem.c。)
表一 Yaffs文件系統源代碼相關文件及功能描述
文件名 功 能
yaffs_ecc.c ECC校驗算法
yaffs_fileem.c 測試flash
yaffs_fs.c 文件系統接口函數
yaffs_guts.c Yaffs文件系統算法
yaffs_mtdif.c NAND函數
yaffs_ramem.c Ramdisk實現
1.內核中沒有YAFFS,所以需要自己建立YAFFS目錄,并把下載的YAFFS代碼復制到該目錄下面。
#mkdir fs/yaffs
#cp *.c(yaffs source code) fs/yaffs
2.修改fs/Kconfig,使得可以配置yaffs :
source "fs/yaffs/Kconfig"
3.修改fs/makefile,添加如下內容:
obj-$(CONFIG_YAFFS_FS) += yaffs/
4.在fs目錄下生成yaffs目錄,并在里面生成一個makefile 和Kconfig
Makefile 內容為:
yaffs-objs := yaffs_fs.o yaffs_guts.o yaffs_mtdif.o yaffs_ecc.o
EXTRA_CFLAGS += $(YAFFS_CONFIGS) -DCONFIG_KERNEL_2_6
Kconfig內容為:
#
# YAFFS file system configurations
#
config YAFFS_FS
tristate "Yet Another Flash Filing System(YAFFS) file system support"
help
YAFFS, for Yet Another Flash Filing System, is a filing system
optimised for NAND Flash chips.
To compile the YAFFS file system support as a module, choose M here:
the module will be called yaffs.
If unsure, say N.
新聞熱點
疑難解答