一、YAFFS文件系統(tǒng)簡(jiǎn)介
YAFFS,Yet Another Flash File System,是一種類似于JFFS/JFFS2的專門為Flash設(shè)計(jì)的嵌入式文件系統(tǒng)。與JFFS相比,它減少了一些功能,因此速度更快、占用內(nèi)存更少。
YAFFS和JFFS都提供了寫均衡,垃圾收集等底層操作。它們的不同之處在于:
(1)、JFFS是一種日志文件系統(tǒng),通過(guò)日志機(jī)制保證文件系統(tǒng)的穩(wěn)定性。YAFFS僅僅借鑒了日志系統(tǒng)的思想,不提供日志機(jī)能,所以穩(wěn)定性不如JAFFS,但是資源占用少。
(2)、JFFS中使用多級(jí)鏈表管理需要回收的臟塊,并且使用系統(tǒng)生成偽隨機(jī)變量決定要回收的塊,通過(guò)這種方法能提供較好的寫均衡,在YAFFS中是從頭到尾對(duì)塊搜索,所以在垃圾收集上JFFS的速度慢,但是能延長(zhǎng)NAND的壽命。
(3)、JFFS支持文件壓縮,適合存儲(chǔ)容量較小的系統(tǒng);YAFFS不支持壓縮,更適合存儲(chǔ)容量大的系統(tǒng)。
YAFFS還帶有NAND芯片驅(qū)動(dòng),并為嵌入式系統(tǒng)提供了直接訪問(wèn)文件系統(tǒng)的API,用戶可以不使用Linux中的MTD和VFS,直接對(duì)文件進(jìn)行操作。NAND Flash大多采用MTD+YAFFS的模式。MTD( Memory Technology Devices,內(nèi)存技術(shù)設(shè)備)是對(duì)Flash操作的接口,提供了一系列的標(biāo)準(zhǔn)函數(shù),將硬件驅(qū)動(dòng)設(shè)計(jì)和系統(tǒng)程序設(shè)計(jì)分開。
二、YAFFS文件系統(tǒng)的移植
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文件系統(tǒng)源代碼相關(guān)文件及功能描述
文件名 功 能
yaffs_ecc.c ECC校驗(yàn)算法
yaffs_fileem.c 測(cè)試flash
yaffs_fs.c 文件系統(tǒng)接口函數(shù)
yaffs_guts.c Yaffs文件系統(tǒng)算法
yaffs_mtdif.c NAND函數(shù)
yaffs_ramem.c Ramdisk實(shí)現(xiàn)
1.內(nèi)核中沒(méi)有YAFFS,所以需要自己建立YAFFS目錄,并把下載的YAFFS代碼復(fù)制到該目錄下面。
#mkdir fs/yaffs
#cp *.c(yaffs source code) fs/yaffs
2.修改fs/Kconfig,使得可以配置yaffs :
source "fs/yaffs/Kconfig"
3.修改fs/makefile,添加如下內(nèi)容:
obj-$(CONFIG_YAFFS_FS) += yaffs/
4.在fs目錄下生成yaffs目錄,并在里面生成一個(gè)makefile 和Kconfig
Makefile 內(nèi)容為:
yaffs-objs := yaffs_fs.o yaffs_guts.o yaffs_mtdif.o yaffs_ecc.o
EXTRA_CFLAGS += $(YAFFS_CONFIGS) -DCONFIG_KERNEL_2_6
Kconfig內(nèi)容為:
#
# 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.
新聞熱點(diǎn)
疑難解答
圖片精選