• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > YAFFS文件系統在嵌入式Linux系統中的構建與改進

    YAFFS文件系統在嵌入式Linux系統中的構建與改進

    作者: 時間:2013-09-13 來源:網絡 收藏
    在嵌入式Linux的開發工作中,常用的存儲設備有NorFlash和NandFlash,其中價格低廉并適用于高密度和大容量存儲的NandFlash運用更為廣泛[1]。(Yet Another Flash File System)是專門針對NandFlash的特殊構造設計的,是一種日志結構的,性能超越了原有的JFFS系列。但隨著嵌入式技術的發展,在NandFlash介質上的嵌入式Linux中構造時,存在掛載時間過長和損耗均衡性不足兩方面的缺點,需要進一步改進和優化。

    1 YAFFS文件系統

    在嵌入式所用的NandFlash中,基本的讀寫單位是頁(page),YAFFS的存儲位也是頁(一般稱為Chunk),分為附加區(OOB)和數據區。32頁組成塊(block)是基本的擦除單位[2]。由于YAFFS的文件偏移地址和閃存的物理地址不一致而建立了一張文件與物理頁的映射表。閃存的頁序號作為表內容,以每頁描述的文件偏移量作為表索引,再把這張大的映射表分為若干小表,組織成樹結構,以提高文件數據塊的查找速度。這種在內存中建立的層次索引目錄稱之為節點樹(TnodeTree),是YAFFS的核心模型,如圖1所示。在節點樹中按照邏輯索引(Logical chunk index)找到物理地址索引(Physical chunk index)。當文件變大時,所需的葉子節點也會增加,此時節點樹就會“拔高”和“增肥”。當文件進行刪除操作時,用遞歸的方法從葉節點向上收縮,釋放已被刪除節點對應的物理頁。


    2 構建YAFFS文件系統


    2.1 實驗平臺

    開發過程中運用的是目標板與宿主機的交叉編譯模式。宿主機即PC機,采用的是虛擬機+Linux RedHat9.0系統;目標板的硬件是ARM板,采用的是一塊S3C2440的ARM9微處理器,帶有一塊256 MB的NandFlash、64 MB的SDRAM內存。目標板采用的開發軟件是嵌入式Linux2.6.28+交叉編譯工具arm-Linux-gcc4.3.1。YAFFS文件系統的開發流程如圖2所示,引導程序Boot-Loader一般是固定在開板的Flash中(這里不做詳解)。


    2.2 內核移植

    (1)修改交叉編譯環境,使其適用于本實驗平臺。修改頂級Makefile中定義的ARM編譯器,使之與所采用的平臺處理器相對應。修改如下:

    ARCH = arm
    CROSS_COMPILE = /usr/local/3.4.1/arm-linux-

    同時,為了支持實驗平臺處理器12 MHz的晶振頻率,修改Linux提供的輸入時鐘,在文件arch/arm/mach-
    s3c2440/mach-smdk2440.c中定義s3c24xx_init_clocks
    (12 000 000);并且在該文件中將Linux支持的machine名稱改為MACHINE_START(S3C2440,“Study-S3C2440”);最后,修改Linux中默認的機器號,使之與BootLoarder傳遞的機器參數782一致。在arch/arm/tools/math-types中,機器型號語句修改為:

    S3C2440 ARCH_S3C2440 S3C2440 782

    (2)內核支持MTD。MTD是閃存與文件系統的接口,NandFlash、YAFFS文件系統與MTD的聯系如圖3所示。

    linux相關文章:linux教程



    上一頁 1 2 3 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 和静县| 西昌市| 专栏| 清水河县| 盐边县| 连云港市| 兴安盟| 深泽县| 中西区| 襄城县| 竹溪县| 伊宁县| 搜索| 宣恩县| 巴中市| 陆丰市| 金湖县| 宣武区| 利辛县| 玉门市| 大厂| 黄浦区| 郧西县| 屯门区| 班玛县| 长泰县| 焦作市| 罗平县| 吉首市| 凌源市| 孝义市| 深水埗区| 金堂县| 平乡县| 甘肃省| 东乌珠穆沁旗| 普宁市| 哈巴河县| 道孚县| 曲靖市| 渝北区|