• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 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上面下載最新的MTD和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_eclearcase/" 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是自己做ECC校驗的,所以要把MTD驅動里面的ECC去掉。在驅動里面改成this->eccmode = NAND_ECC_NONE就可以了。
    另外YAFFS是用mkyaffs來擦除flash,所以在mtd-utils中加上mkyaffs.c,一起編譯進去。
    最后就是編譯了,呵呵。中間會有一些警告沒有關系的,就是寫沒有用的變量和函數,不過話說回來YAFFS的代碼寫的確實不太規范。當然它的性能確實沒話說。有興趣的可以試一下。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>