亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        YAFFS在嵌入式Linux系統(tǒng)中的構(gòu)建與改進(jìn)*

        2012-07-03 00:23:52熊胤琪
        電子技術(shù)應(yīng)用 2012年3期
        關(guān)鍵詞:嵌入式系統(tǒng)

        熊胤琪,嚴(yán) 華

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

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

        1 YAFFS文件系統(tǒng)

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

        2 構(gòu)建YAFFS文件系統(tǒng)

        2.1 實(shí)驗(yàn)平臺

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

        圖2 YAFFS構(gòu)建流程

        2.2 內(nèi)核移植

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

        ARCH=arm

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

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

        S3C2440 ARCH_S3C2440 S3C2440 782

        (2)內(nèi)核支持MTD。MTD是閃存與文件系統(tǒng)的接口,NandFlash、YAFFS文件系統(tǒng)與MTD的聯(lián)系如圖3所示。

        圖3NandFlash、MTD與 YAFFS的聯(lián)系

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

        在該文件中,還定義了Flash的總線寬度、基本讀寫操作以及硬件相關(guān)的控制引腳,可根據(jù)相應(yīng)的需求進(jìn)行修改。

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

        (4)編譯內(nèi)核。在Linux2.6.28內(nèi)核目錄下執(zhí)行make menuconfig操作,在內(nèi)核配置菜單中選中支持MTD、NandFlash和YAFFS文件系統(tǒng)的選項(xiàng)。注意一定要選擇選項(xiàng)Let yaffs do its own ECC,因?yàn)橹谱鞒鰜淼腨AFFS文件系統(tǒng)映像中附加區(qū)的數(shù)據(jù)包含了ECC校驗(yàn)算法。此算法與NandFlash的MTD中的校驗(yàn)算法不相同,會造成MTD認(rèn)為頁校驗(yàn)錯誤;之后運(yùn)行make zImage,在/linux2.6.28/arch/arm/boot中形成壓縮的內(nèi)核鏡像zImage,通過S3C2440的專用串口工具DWN,將鏡像燒寫到kernel分區(qū)。

        2.3 YAFFS根文件系統(tǒng)制作

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

        ARCH=arm

        CROSS_COMPILE=/usr/arm-linux-

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

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

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

        3 YAFFS改進(jìn)策略

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

        圖4 索引塊chunk存儲結(jié)構(gòu)

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

        圖5 YAFFS加載改進(jìn)流程圖

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

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

        4 性能測試

        圖6 YAFFS垃圾回收策略改進(jìn)流程圖

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

        在以NandFlash為介質(zhì)的嵌入式Linux平臺上構(gòu)建了YAFFS文件系統(tǒng),并在原有YAFFS文件系統(tǒng)的基礎(chǔ)上,對YAFFS的啟動時間和損耗平衡進(jìn)行優(yōu)化。通過測試證明,啟動時間相比原文件系統(tǒng)縮短了一半以上,且實(shí)現(xiàn)了NandFlash的摩擦損耗基本保持平衡,優(yōu)于改進(jìn)前的文件系統(tǒng)。

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

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

        [2]應(yīng)駿,江峰,李莉.嵌入式系統(tǒng)上的文件系統(tǒng)優(yōu)化設(shè)計[J].電子技術(shù)應(yīng)用,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的嵌入式文件系統(tǒng)的改進(jìn)與優(yōu)化[J].計算機(jī)應(yīng)用,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.

        猜你喜歡
        嵌入式系統(tǒng)
        Smartflower POP 一體式光伏系統(tǒng)
        WJ-700無人機(jī)系統(tǒng)
        ZC系列無人機(jī)遙感系統(tǒng)
        北京測繪(2020年12期)2020-12-29 01:33:58
        基于PowerPC+FPGA顯示系統(tǒng)
        半沸制皂系統(tǒng)(下)
        TS系列紅外傳感器在嵌入式控制系統(tǒng)中的應(yīng)用
        電子制作(2019年7期)2019-04-25 13:17:14
        嵌入式系統(tǒng)通信技術(shù)的應(yīng)用
        電子制作(2018年18期)2018-11-14 01:48:16
        搭建基于Qt的嵌入式開發(fā)平臺
        連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
        嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
        欧美激情国产亚州一区二区| 国产人妻精品无码av在线| 精品国产aⅴ无码一区二区| 中文字幕在线久热精品| 丝袜美腿av免费在线观看| 亚洲精品av一区二区| 免费人妻精品一区二区三区| 国产成人精品日本亚洲18| 亚洲免费观看一区二区三区| 加勒比日韩视频在线观看| 三级全黄的视频在线观看| 又爽又黄无遮挡高潮视频网站| 中文字幕亚洲区第一页| 精品国产一区二区三区性色| 亚洲小说图区综合在线| 亚洲熟妇少妇任你躁在线观看| 午夜日韩视频在线观看| 国产流白浆视频在线观看 | 国产小屁孩cao大人| 精品女同一区二区三区亚洲| 18禁在线永久免费观看| 日韩插啊免费视频在线观看| 亚洲熟女av超清一区二区三区| 亚洲永久免费中文字幕| 成人在线免费电影| 日日摸夜夜添夜夜添无码免费视频| 亚洲av网一区天堂福利| 手机在线免费av资源网| 国产精品无码久久久久| 亚洲国产香蕉视频欧美| 精品一区二区三区国产av| 亚洲欧洲国产成人综合在线| 无码人妻一区二区三区免费n鬼沢| 成人国产在线播放自拍| 国产一级二级三级在线观看av| 4hu四虎永久在线观看| 久久这里只精品国产2| 久久99精品久久只有精品| 午夜射精日本三级| 亚洲成a人片在线网站| 亚洲熟女av一区少妇|