在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > YAFFS文件系統(tǒng)在嵌入式Linux系統(tǒng)中的構(gòu)建與改進(jìn)

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

            作者: 時(shí)間:2013-09-13 來源:網(wǎng)絡(luò) 收藏

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

            [0] = { .name = "Boot",
            .size = 0x00100000,
            .offset = 0
            }, //mtd0分區(qū),大小為1 MB,相對偏移地址為0x0
            [1] = { .name = "MyApp",
            .size = 0x003c0000,
            .offset = 0x00140000,
            }, //mtd1分區(qū),存儲(chǔ)應(yīng)用程序
            [2] = { .name = "Kernel",
            .size = 0x00300000,
            .offset = 0x00500000,
            }, //mtd1分區(qū),用于存放內(nèi)核
            [3] = { .name = "filesystem",
            .size = 0x03c00000,
            .offset = 0x00800000,
            }, //mtd3分區(qū),大小為30 MB, 用于存放
            [4]……
            }

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

            (3)增加內(nèi)核對的支持。首先將最新的源碼包放入Linux內(nèi)核的/fs目錄中,執(zhí)行解壓操作,/fs目錄中添加了的源碼;然后在內(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的選項(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)算法不相同,會(huì)造成MTD認(rèn)為頁校驗(yàn)錯(cuò)誤;之后運(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)行的動(dòng)態(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)的配置文件及編寫啟動(dòng)腳本,系統(tǒng)啟動(dòng)訪問的第一個(gè)腳本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ū)。啟動(dòng)系統(tǒng)就會(huì)顯示啟動(dòng)信息:VFS: Mounted root (yaffs filesystem)。

            3 YAFFS改進(jìn)策略

            (1)針對掛載YAFFS時(shí)需要掃描Flash上所有被使用的塊從而減慢了啟動(dòng)速度的問題,在文件系統(tǒng)的加載過程中采用空間換取時(shí)間的策略,加入索引區(qū),用于存儲(chǔ)文件屬性信息節(jié)點(diǎn)[3],但對于閃存較小的嵌入式系統(tǒng)則沒有太大意義。YAFFS在NandFlash的頁中定義和記錄數(shù)據(jù)Objectpoint_data和file_data,還增加了index_data數(shù)據(jù)類型,其中記錄了掛載系統(tǒng)時(shí)所需要的數(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等,索引塊中每頁的存儲(chǔ)結(jié)構(gòu)如圖4所示。

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

            linux相關(guān)文章:linux教程




            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉