歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Linux2.6內核下的YAFFS文件系統移植

一、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.

Further information on YAFFS is available at

<http://www.aleph1.co.uk/yaffs/>.

config YAFFS_MTD_ENABLED

bool "NAND mtd support"

depends on YAFFS_FS

help

This adds the yaffs file system support for working with a NAND mtd.

If unsure, say Y.

config YAFFS_RAM_ENABLED

bool "yaffsram file system support"

depends on YAFFS_FS

help

This adds the yaffsram file system support. Nice for testing on x86,

but uses 2MB of RAM.  Don't enable for NAND-based targets.

If unsure, say N.

comment "WARNING: mtd and/or yaffsram support should be selected"

depends on YAFFS_FS && !YAFFS_MTD_ENABLED && !YAFFS_RAM_ENABLED

config YAFFS_USE_OLD_MTD

bool "Old mtd support"

depends on YAFFS_FS && 0

help

Enable this to use the old MTD stuff that did not have yaffs support.

You can use this to get around compilation problems, but the best

thing to do is to upgrade your MTD support. You will get better speed.

If unsure, say N.

config YAFFS_USE_NANDECC

bool "Use ECC functions of the generic MTD-NAND driver"

depends on YAFFS_FS

default y

help

This enables the ECC functions of the generic MTD-NAND driver.

This will not work if you are using the old mtd.

NB Use NAND ECC does not work at present with yaffsram.

If unsure, say Y.

config YAFFS_ECC_WRONG_ORDER

bool "Use the same ecc byte order as Steven Hill's nand_ecc.c"

depends on YAFFS_FS

help

This makes yaffs_ecc.c use the same ecc byte order as

Steven Hill's nand_ecc.c. If not set, then you get the

same ecc byte order as SmartMedia.

If unsure, say N.

config YAFFS_USE_GENERIC_RW

bool "Use Linux file caching layer"

default y

depends on YAFFS_FS

help

Use generic_read/generic_write for reading/writing files. This

enables the use of the Linux file caching layer.

If you disable this, then caching is disabled and file read/write

is direct.

If unsure, say Y.

config YAFFS_USE_HEADER_FILE_SIZE

bool "Use object header size"

depends on YAFFS_FS

help

When the flash is scanned, two file sizes are constructed:

* The size taken from the object header for the file.

* The size figured out by scanning the data chunks.

If this option is enabled, then the object header size is used,

otherwise the scanned size is used.

If unsure, say N.

config YAFFS_DISABLE_CHUNK_ERASED_CHECK

bool "Turn off debug chunk erase check"

depends on YAFFS_FS

default y

help

Enabling this turns off the test that chunks are erased in flash

before writing to them.  This is safe, since the write verification

will fail.  Suggest enabling the test (ie. say N)

during development to help debug things.

If unsure, say Y.

#config YAFFS_DISABLE_WRITE_VERIFY

# bool "Disable write verify (DANGEROUS)"

# depends on YAFFS_FS && EXPERIMENTAL

# help

#   I am severely reluctant to provide this config. Disabling the

#   verification is not a good thing to do since NAND writes can

#   fail silently.  Disabling the write verification will cause your

#   teeth to rot, rats to eat your corn and give you split ends.

#   You have been warned. ie. Don't uncomment the following line.

#

#   If unsure, say N.

#

config YAFFS_SHORT_NAMES_IN_RAM

bool "Cache short names in RAM"

depends on YAFFS_FS

default y

help

If this config is set, then short names are stored with the

yaffs_Object.  This costs an extra 16 bytes of RAM per object,

but makes look-ups faster.

If unsure, say Y.

Copyright © Linux教程網 All Rights Reserved