999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2012-07-03 00:23:52熊胤琪
電子技術應用 2012年3期
關鍵詞:嵌入式系統

熊胤琪,嚴 華

(四川大學 電子信息學院,四川 成都610065)

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

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 Red-Hat9.0系統;目標板的硬件是ARM板,采用的是一塊S3C2440的ARM9微處理器,帶有一塊256 MB的Nand-Flash、64 MB的SDRAM內存。目標板采用的開發軟件是嵌入式 Linux2.6.28+交叉編譯工具arm-Linux-gcc4.3.1。YAFFS文件系統的開發流程如圖2所示,引導程序Boot-Loader一般是固定在開板的Flash中(這里不做詳解)。

圖2 YAFFS構建流程

2.2 內核移植

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

ARCH=arm

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

同時,為了支持實驗平臺處理器12 MHz的晶振頻率,修改Linux提供的輸入時鐘,在文件arch/arm/machs3c2440/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所示。

圖3NandFlash、MTD與 YAFFS的聯系

老版本的MTD與NandFlash的兼容不是很好,需要安裝最新的MTD。實現Linux對MTD的支持,首先要在MTD子系統內添加NandFlash的硬件設備驅動。在arch/arm/plat-s3c2440目錄下的文件common-smdk.c中定義了Flash硬件平臺的驅動信息,在文件中定義了結構體static struct mtd-partition partition-info[],表示閃存的MTD分區信息,這里將NandFlash分為5個MTD分區,分區內容如下:

在該文件中,還定義了Flash的總線寬度、基本讀寫操作以及硬件相關的控制引腳,可根據相應的需求進行修改。

(3)增加內核對YAFFS的支持。首先將最新的YAFFS源碼包放入Linux內核的/fs目錄中,執行解壓操作,/fs目錄中添加了YAFFS文件系統的源碼;然后在內核中對YAFFS進行配置,相應地修改為:在/fs/Makefile中增加 obj-$(CONFIG_YAFFS_FS)+=yaffs/;在/fs/Kconfig中增加 source“fs/yaffs/Kconfig”。

(4)編譯內核。在Linux2.6.28內核目錄下執行make menuconfig操作,在內核配置菜單中選中支持MTD、NandFlash和YAFFS文件系統的選項。注意一定要選擇選項Let yaffs do its own ECC,因為制作出來的YAFFS文件系統映像中附加區的數據包含了ECC校驗算法。此算法與NandFlash的MTD中的校驗算法不相同,會造成MTD認為頁校驗錯誤;之后運行make zImage,在/linux2.6.28/arch/arm/boot中形成壓縮的內核鏡像zImage,通過S3C2440的專用串口工具DWN,將鏡像燒寫到kernel分區。

2.3 YAFFS根文件系統制作

(1)制作文件系統。首先,創建文件系統根目錄rootfs,并且在根目錄下創建子目錄bin和sbin(存放自帶命令)、etc(系統配置文件)、proc、lib(程序運行的動態鏈接庫)、user、dev(系統支持的設備文件);然后,安裝 Linux的常用命令集Busybox,安裝其源碼到Linux根目錄下,修改其中的makefile,實現交叉編譯:

ARCH=arm

CROSS_COMPILE=/usr/arm-linux-

在Busybox的目錄下執行make menuconfig,進入配置菜單,根據需求添加選項。編譯后將install目錄下的文件拷貝到/rootfs中;其次,安裝交互程序 Bash,使系統可進入交互界面,源碼包解壓后,同樣修改鏈接路徑為:export PATH=/usr/local/arm/3.4.1/bin;編譯后將得到的bash靜態鏈接程序拷貝到/rootfs/bin目錄中;最后,建立系統的配置文件及編寫啟動腳本,系統啟動訪問的第一個腳本etc/inittab,編輯etc/init.d/rcS腳本,執行掛載文件系統Ramfs和 sysfs的命令,還可以在 etc/rc.local中配置系統IP地址。

(2)制作YAFFS文件系統鏡像。在YAFFS源碼文件包中有util工具包,對工具包中makefile的交叉編譯路徑進行修改,編譯后得到mkyaffsimage工具。根目錄下執行:./mkyaffsimage/rootfs rootfs.yaffs。

(3)YAFFS根文件系統燒寫。修改內核的配置參數rootsystem=YAFFS,通過DWN把rootfs.yaffs鏡像文件燒到filesystem分區。啟動系統就會顯示啟動信息:VFS:Mounted root(yaffs filesystem)。

3 YAFFS改進策略

(1)針對掛載YAFFS時需要掃描Flash上所有被使用的塊從而減慢了啟動速度的問題,在文件系統的加載過程中采用空間換取時間的策略,加入索引區,用于存儲文件屬性信息節點[3],但對于閃存較小的嵌入式系統則沒有太大意義。YAFFS在NandFlash的頁中定義和記錄數據Objectpoint_data和file_data,還增加了index_data數據類型,其中記錄了掛載系統時所需要的數據和節點信息,并分配專門記錄這些數據的塊(即索引塊)。在YAFFS中創建 index_data類型的數據結構 yaffs_monut_index,組織文件屬性的初始化數據的結構,如yaffs_object及部分相關的 yaffs_Device、yafffs_BlockInfo和 yaffs_Tnode等,索引塊中每頁的存儲結構如圖4所示。

圖4 索引塊chunk存儲結構

inode_num和check及其他有用的數據都是存儲在索引塊每頁的附加空間中的標記位。inode_num用于記錄存儲啟動控制信息所用的頁數,掛載時系統只需要掃描索引塊已使用的頁;check記錄了系統卸載時,控制信息是否正常地寫入閃存中,啟動時如能檢查通過后,則采用改進策略掛載系統,否則運行原有機制,掃描所有塊[4]。YAFFS掛載時,系統掃描每一塊第一頁的附加區,若不是索引塊就跳過檢查下一塊;如果是,則讀取該塊,獲取記錄了節點樹中的葉節點數據的信息,重建節點樹[5]。YAFFS文件系統成功掛載,即以一定的存儲空間換取了大量的掛載時間。采用了該策略后,第一次掛載時系統將運行原有啟動機制,卸載時將文件屬性數據寫入索引塊,第二次掛載時則根據默認設置直接讀取啟動數據[6],而且還避免了隨著文件系統增大而啟動變慢的問題。采用空間換取時間的策略后與原YAFFS加載過程的區別如流程圖5所示。

圖5 YAFFS加載改進流程圖

(2)當YAFFS系統進行寫操作且NandFlash中未分配空間小于預設的閾值時,啟動垃圾回收機制,選取最臟塊擦除。YAFFS文件系統的垃圾回收策略結合了隨機策略的平衡性和貪心策略的高效性,回收機制包括:回收不再使用的臟塊以及對存有有效數據的壞塊進行處理。但回收算法具有隨機性,系統有可能總是選中同一個塊,認定它是最臟的塊,并連續地擦除回收,造成惡性的使用,而NandFlash的擦除次數是有限的 (大約在10次左右)。出現惡性的使用會造成閃存中的部分塊損壞,而其他塊使用次數卻極少,縮短了閃存的壽命。

(3)針對YAFFS的磨損平衡性差的情況,采用了擦除計數機制[7]:在 yaffs.guts.h中定義了存儲在 NandFlash的附加區中的數據結構yaffs_tags,用來標志每頁的狀態;定義了chunkID、objectID和有效字數等。其中有2 bit的空間是沒有使用的,并從 chunkID和 objectID分配 7 bit,將這9 bit的空間定義為erase_count,用于記錄該頁被擦除的次數。初始值為零,當被擦除時標記為“1”,表示擦除過一次可達到的最大計數值為511。系統垃圾回收的流程圖如圖6所示。當某一塊的擦除次數達到511時,該塊與被擦除數最小的塊交換各自存儲的數據,使頻繁擦寫的塊存儲很少使用的數據,而被擦除次數少的塊存儲頻繁地更新數據[8](如文件屬性信息數據)。當擦除計數達到最大的塊超過70%以上時,將所有的擦除計數值歸零,循環以上的操作,從而實現NandFlash的損耗基本平衡、延長使用壽命、提高文件系統可靠性。

4 性能測試

圖6 YAFFS垃圾回收策略改進流程圖

按照以上介紹的策略修改YAFFS文件系統相關部分的源代碼,并且根據YAFFS根文件系統構建的基本步驟,將改進后的文件系統作為根文件系統燒寫入目標板。在實驗平臺上,分別對YAFFS和改進后的文件系統進行性能測試和研究。性能測試的主要內容有:各塊的擦除次數和文件系統掛載的時間。在實驗平臺上大量地進行讀寫和刪除操作,在源代碼中也添加擦除計數(只用于計數),兩個文件系統經過相同數量的讀寫和刪除操作后,讀取每塊的擦除次數,分析數據得出:原YAFFS中存在擦除次數為零的塊,而改進后則沒有;原YAFFS的最大擦除次數與最小擦除次數的比值是無窮大,而改進后都在平均值附近波動,起伏不大。文件系統加載測試的主要方法是在內核源碼和文件系統源碼中添加中斷機制和時鐘,安裝評估系統時間的工具PrintkTimes補丁,運用printk輸出所需數據。測試結果如表1所示。由表1可看出,由于第一次啟動時文件屬性信息還未寫入索引區,系統啟動時間與改進前大致相同,但第二次啟動時索引區機制開始工作,直接從索引塊中讀取文件信息,修改后的YAFFS啟動時間已有明顯的改善,表明改進策略達到縮短加載時間的目的。

在以NandFlash為介質的嵌入式Linux平臺上構建了YAFFS文件系統,并在原有YAFFS文件系統的基礎上,對YAFFS的啟動時間和損耗平衡進行優化。通過測試證明,啟動時間相比原文件系統縮短了一半以上,且實現了NandFlash的摩擦損耗基本保持平衡,優于改進前的文件系統。

表1 啟動時間測試表(單位 s)

[1]胡德鵬,李仁發.一種微嵌入式Flash文件系統—uEFFS.電子技術應用,2007,33(7):27-29.

[2]應駿,江峰,李莉.嵌入式系統上的文件系統優化設計[J].電子技術應用,2007,33(12):141-144.

[3]Cao Lu,Shao Shi.A fast mounting method for NAND Flash file system.computer research and development(ICCRD)[C].2011 3rd International Conference,2011:416-420.

[4]楊春林,雷航.NandFlash的嵌入式文件系統的改進與優化[J].計算機應用,2007,27(12):3102-3104.

[5]RYU J,PARK C.Fast initialization and memory management Techniques for log-based flash memory file systems,Proceeding[C].of the International Conference on Embedded and Systems,Daegu,Korea,May,2007.

[6]CHAN S P,TAE H H.Fast mounting method for NAND Flash memory,advanced communication technology(ICACT)[C].The 12th International Conference.2011:416-420.

[7]KEE H J,TAE H H.Efficient garbage collection policy and block management method for NAND Flash memory[C].2010 2nd International Conference on Mechanical and Electronics Engineering(ICMEE 2010):327-331.

[8]Yuan-Hao Chang,Jen-Wei Hsieh,Tei-WeiKuo.Improving Flash wear-leveling by proactively moving static data[C].IEEE Transactions on Computers,January,2010:53-65.

猜你喜歡
嵌入式系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
半沸制皂系統(下)
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
搭建基于Qt的嵌入式開發平臺
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
主站蜘蛛池模板: 亚洲国产亚综合在线区| 国产精品亚洲专区一区| 亚州AV秘 一区二区三区| 国产在线麻豆波多野结衣| 91www在线观看| 一区二区日韩国产精久久| 四虎国产精品永久在线网址| 久久亚洲高清国产| 久久精品人妻中文系列| 在线亚洲精品自拍| 亚洲国产精品日韩av专区| 欧美精品三级在线| 久久综合色天堂av| 丁香五月婷婷激情基地| 亚洲成年人片| 国产青榴视频| 亚洲欧美精品日韩欧美| 欧美日韩在线第一页| 亚洲人成网站在线观看播放不卡| 99热线精品大全在线观看| 久久国产精品77777| 国产国产人免费视频成18| 免费av一区二区三区在线| 热re99久久精品国99热| 国产女同自拍视频| 欧美日本在线| 成人韩免费网站| 中文字幕亚洲综久久2021| 久久黄色免费电影| 国内99精品激情视频精品| 亚洲欧美激情小说另类| 精品91自产拍在线| 久久综合丝袜长腿丝袜| 999精品视频在线| 色AV色 综合网站| 香蕉国产精品视频| 精品一區二區久久久久久久網站| 国模视频一区二区| 国产99精品久久| 亚洲精品动漫在线观看| 亚洲欧美自拍一区| 日韩123欧美字幕| 久久综合伊人77777| 无码中文字幕加勒比高清| 免费无码又爽又刺激高| 国产又黄又硬又粗| 久久成人免费| 中文字幕天无码久久精品视频免费| 婷婷午夜影院| 国产精品99久久久| 青青青国产视频| 免费高清a毛片| 香蕉久人久人青草青草| 狠狠色婷婷丁香综合久久韩国| 欧美成a人片在线观看| 国产一级做美女做受视频| 欧美成人h精品网站| 日韩成人在线一区二区| 国产特级毛片aaaaaa| 视频二区中文无码| 亚洲V日韩V无码一区二区 | 黄色网在线| 亚洲无码37.| 亚洲无码视频图片| 国产97公开成人免费视频| 大香伊人久久| 久久国产高潮流白浆免费观看| 午夜一区二区三区| 秘书高跟黑色丝袜国产91在线| 中日无码在线观看| 色久综合在线| 免费一级无码在线网站| 欧美在线一二区| 亚洲精品麻豆| 国产精品页| 一本大道视频精品人妻| 国产美女无遮挡免费视频网站| 四虎成人在线视频| 欧美精品色视频| 色婷婷色丁香| 日韩av无码DVD| 久久性妇女精品免费|