NAND flash文件系統
發表于:2007-07-04來源:作者:點擊數:
標簽:
目前flash的文件系統比較多,用的比較多的就是JFFS2文件系統?;贜OR flash上的JFFS2文件系統可以說算是比較成熟了,支持NAND flash的JFFS2也已經發布了。源代碼可以到 http://www.linux-mtd.infradead.org 上面下載。但是在我的 測試過程 中,在nand flash
目前flash的文件系統比較多,用的比較多的就是JFFS2文件系統?;贜OR flash上的JFFS2文件系統可以說算是比較成熟了,支持NAND flash的JFFS2也已經發布了。源代碼可以到
http://www.linux-mtd.infradead.org上面下載。但是在我的
測試過程中,在nand flash上掛接的JFFS2文件系統很不穩定,經常有CRC錯誤產生。特別是進行寫操作的時候,每次復位都會產生CRC錯誤,可以說支持NAND flash的JFFS2文件系統目前還不成熟。而YAFFS文件系統則是專門針對NAND flash的,源代碼可以到
http://www.aleph1.co.uk/yaffs/index.html上下載。在測試過程中穩定
性能比JFFS2文件系統要穩定的多,而且mount分區的時間也比JFFS2文件系統少的多。用JFFS2 mount一個2m的文件系統大約需要1s。下面分別介紹在uclinux下面使用JFFS2和YAFFS文件系統。
1、JFFS2
到
http://www.linux-mtd.infradead.org上面下載最新的M
TD和JFFS2壓縮包。壓縮包里面還有有關的內核補丁和一些MTD的相關工具。主要的補丁就是ilookup-2.4.23.patch,因為最新的MTD驅動中要用到一個ilookup()函數。打完補丁、更新了MTD驅動和JFFS2文件系統之后就開始寫自己nand flash驅動了。如果不想把JFFS2作為根文件系統的話,還需要修改MTD_BLOCK_MAJOR。驅動可以參考里面的例子,最簡單的就是參考spia.c。
寫驅動主要工作是定義flash分區結構、定義flash讀寫地址、寫控制flash的**_hwcontrol()函數。具體的操作要看所用的nand flash的芯片資料。相對NOR flash來說驅動要簡單多了。:)
改完之后再配置
Memory Technology Devices(MTD)下
CONFIG_MTD=Y
CONFIG_MTD_DEBUG=Y
CONFIG_MTD_DEBUG_VERBOSE=3
CONFIG_MTD_PARTITIONS=Y
CONFIG_MTD_CHAR=Y
CONFIG_MTD_BLOCK=Y
NAND Flash Device Drivers下
CONFIG_MTD_NAND=Y
定義自己的驅動文件
File systems下
CONFIG_JFFS2_FS=Y
CONFIG_JFFS2_FS_DEBUG=2
CONFIG_JFFS2_FS_NAND=y /*這個是新加的*/
在uClinux v1.3.4 Configuration下
Flash Tools下
CONFIG_USER_MTDUTILS=Y
CONFIG_USER_MTDUTILS_ERASE=Y
CONFIG_USER_MTDUTILS_ERASEALL=Y
CONFIG_USER_MTDUTILS_MKFSJFFS2=Y
最后就是辛苦了調試工作了。:(MTD驅動調試完之后,就可以在上面掛接JFFS2文件系統了。參看flash分區情況:cat /proc/mtd,擦除分區:eraseall /dev/mtd*.例如把第一個分區mount到/mnt目錄下面:
先:eraseall /dev/mtd0
然后:mount -t jffs2 /dev/mtdblock0 /mnt
2、YAFFS
YAFFS意義為'yet another flash file system',也是一個
開源的文件系統。YAFFS是目前為止唯一一個專門為NAND flash設計的文件系統,具有很好的可移植性,能夠在linux,uclinux,和wince
下面運行。
在
http://www.aleph1.co.uk/yaffs/index.html上下載源代碼。壓縮包里面也包含YAFFS的說明文檔。YAFFS文件系統的源文件就devextras.h,yaffs_e
clearcase/" target="_blank" >cc.c,yaffs_ecc.h,yaffs_guts.c,yaffs_guts.h,yaffs_mtdif.h,yaffs_mtdif.c和yportenv.h
另外需要配置的宏:CONFIG_YAFFS_FS 和CONFIG_YAFFS_MTD_ENABLED,就是配置在mtd上面掛接YAFFS,其它還有一些輔助配置需要時也可以配置。
在fs目錄下面建一個yaffs目錄,把以上說的文件考里面去,新建一個makefile:
O_TARGET := yaffs.o
obj-y := yaffs_fs.o yaffs_guts.o yaffs_mtdif.o yaffs_ecc.o
obj-m := $(O_TARGET)
include $(TOPDIR)/Rules.make
接下來就是改fs目錄下面config.in和makefile,在配置YAFFS的時候,把YAFFS連接進去。
如果像前面一樣已經把NAND MTD驅動調好了,加YAFFS就很簡單了。因為YAFFS是自己做E
CC校驗的,所以要把MTD驅動里面的ECC去掉。在驅動里面改成this->eccmode = NAND_ECC_NONE就可以了。
另外YAFFS是用mkyaffs來擦除flash,所以在mtd-utils中加上mkyaffs.c,一起編譯進去。
最后就是編譯了,呵呵。中間會有一些警告沒有關系的,就是寫沒有用的變量和函數,不過話說回來YAFFS的代碼寫的確實不太規范。當然它的性能確實沒話說。有興趣的可以試一下。
原文轉自:http://www.kjueaiud.com