<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • 嵌入式系統(tǒng)中的線性Flash文件系統(tǒng)設(shè)計(jì)

    時(shí)間:2024-09-14 16:42:20 理工畢業(yè)論文 我要投稿
    • 相關(guān)推薦

    嵌入式系統(tǒng)中的線性Flash文件系統(tǒng)設(shè)計(jì)

    在嵌入式系統(tǒng)中,為了便于對閃存(Flash)空間進(jìn)行管理,會采用文件的形式來訪問Flash。目前,可以購買到的Flash文件系統(tǒng)一般都是兼容DOS的文件系統(tǒng)(Flash File System,F(xiàn)FS),這對需要一個(gè)具有復(fù)雜的目錄層次,并且DDS文件兼容的系統(tǒng)來說是必要的;但是對大多數(shù)的嵌入式應(yīng)用來說,這種文件系統(tǒng)太過奢侈。筆者在參與嵌入式系統(tǒng)項(xiàng)目的時(shí)候,設(shè)計(jì)了一種線性文件系統(tǒng),它適用于大多數(shù)的嵌入式應(yīng)用對Flash文件系統(tǒng)的需求。

    線性文件系統(tǒng)設(shè)計(jì)基于三個(gè)目標(biāo):一是提供給應(yīng)用程序通過文件名而不是物理地址訪問系統(tǒng)Flash的能力;二是文件系統(tǒng)的設(shè)計(jì)獨(dú)立于實(shí)時(shí)操作系統(tǒng)(RTOS),這樣可以很容易移植到不同的嵌入式應(yīng)用中;三是設(shè)計(jì)統(tǒng)一的底層接口,適應(yīng)不同的Flash類型。本文設(shè)計(jì)的線性文件系統(tǒng)為典型的嵌入式系統(tǒng)提供了所需的類文件系統(tǒng)能力。需要注意的是,本文件系統(tǒng)不支持復(fù)雜的Flash扇區(qū)擦寫次數(shù)均衡算法,沒有目錄層次,并且和其它的文件系統(tǒng)不兼容。

    1 線性文件系統(tǒng)

    線性文件系統(tǒng)的設(shè)計(jì)思路是這樣的:文件分為文件頭和文件數(shù)據(jù)區(qū)兩個(gè)部分,每個(gè)文件按照順序存放在Flash中,以單向鏈表來鏈接文件。文件的起始部分是文件頭,包含文件的屬性、指向下一個(gè)文件頭的指針、文件頭和文件數(shù)據(jù)區(qū)的32位循環(huán)冗余校驗(yàn)和(CRC32)等。文件頭用一個(gè)32位的字來表示文件屬性,每位表示一種屬性,如數(shù)據(jù)文件或者是可執(zhí)行文件,是否已刪除的文件等,具體可以根據(jù)應(yīng)用的需要來定義文件的屬性;文件頭和文件數(shù)據(jù)區(qū)維護(hù)獨(dú)立的CRC32校驗(yàn),使文件系統(tǒng)能更精確檢測文件的完整性。文件的起始地址沒有特殊需求,分配給文件系統(tǒng)的Flash大小限制了文件的大小。另外,線性文件系統(tǒng)作為嵌入式系統(tǒng)的一個(gè)功能模塊,它為應(yīng)用程序提供與標(biāo)準(zhǔn)文件系統(tǒng)類似的API接口,如:read()、write()、open()、close()、stat()和seek()等。對于同時(shí)在多片F(xiàn)lash的系統(tǒng)而言,每片F(xiàn)lash相當(dāng)于一個(gè)目標(biāo),文件都可存儲在任何一片中(當(dāng)然受物理空間限制),但不能跨片存儲。

    圖1 Flash文件系統(tǒng)空間

    在第一個(gè)文件創(chuàng)建之前,必須進(jìn)行初始化,將所有分配給文件系統(tǒng)的Flash空間擦除。當(dāng)創(chuàng)建第一個(gè)文件時(shí),起始位置從文件系統(tǒng)的起始地址開始,文件頭指針指向下一個(gè)空文件的起始位置(鏈表尾部);第二個(gè)文件的位置從當(dāng)前的鏈表尾部開始,同時(shí)文件頭中的鏈表指針指向新的尾部。刪除文件時(shí),僅僅是簡單地把文件頭的標(biāo)識位中的活動文件標(biāo)識位置0,表示刪除。這樣,在經(jīng)過多次刪除之后,就有必要運(yùn)行碎片整理模塊來進(jìn)行文件系統(tǒng)Flash空間的碎片整理。碎片整理模塊還需要在文件系統(tǒng)Flash空間尾部留一個(gè)扇區(qū)來數(shù)據(jù)備份,以便當(dāng)碎片整理被打斷時(shí)(如下電或者復(fù)位)可以恢復(fù)文件系統(tǒng)。這個(gè)保留的扇區(qū)稱空閑扇區(qū)。它必須放在文件系統(tǒng)空間之后,這樣可以保證文件系統(tǒng)的所有文件在所占用的Flash空間是連續(xù)的。整個(gè)文件空間的分配如圖1所示。

    陰影部分是文件頭,數(shù)據(jù)結(jié)構(gòu)如下:

    struct hdr{

    unsigned short hdrsize; /*文件頭字節(jié)數(shù)*/

    long filsize; /*文件頭版本*/

    long filsize; /*文件大小*/

    long flags; /*描述文件的標(biāo)識*/

    unsigned long filcrc; /*文件數(shù)據(jù)的CRC32的值*/

    unsigned long hdrcec; /*文件的最后修改時(shí)間*/

    struct hdr *next; /*指向下一個(gè)文件頭的指針*/

    char name[NAMESIZE]; /*文件名*/

    char info[INFOSIZE]; /*文件描述信息*/

    };

    碎片整個(gè)記錄區(qū)包含兩種數(shù)據(jù)類型:碎片整理文件頭信息表defraghdr和文件區(qū)扇區(qū)整理前后的CRC值備份表sectorcre。具體的地址分配從空閑扇區(qū)的起始地址減1開始,往前分配文件系統(tǒng)扇區(qū)數(shù)乘以4字節(jié)作為sectorcrc的空間;從sectorcrc起始地址減1開始,往前分配活動文件個(gè)數(shù)乘以64字節(jié)作為碎片整理文件頭信息表。這兩個(gè)結(jié)構(gòu)定義如下:

    struct defraghdr{

    struct hdr *ohdr; /*文件頭的原始位置指針*/

    struct hdr *nextfile; /*指向下一個(gè)文件的指針*/

    long filsize; /*文件大小*/

    unsigned long crc; /*這個(gè)頭的CRC32值*/

    unsigned long ohdrcrc; /*原始文件頭CRC32值的拷貝*/

    long idx; /*碎片整理表頭的索引*/

    long nesn; /*新的文件尾的扇區(qū)號*/

    long neso; /*新的文件尾的扇區(qū)偏移量*/

    char *nda; /*新的文件起始地址*/

    char fname[NAMESIZE]; /*文件名*/

    };

    struct sectorcrc{

    unsigned long precrc; /*碎片整理前扇區(qū)數(shù)據(jù)CRC32的值*/

    unsigned long postcrc; /*碎片整理后扇區(qū)數(shù)據(jù)CRC32的值*/

    };

    從上面介紹可知,除了文件數(shù)據(jù)之外,文件系統(tǒng)還需要如下4種額外的開銷。

    ①文件頭:這是每個(gè)文件必須的開銷,如果文件名和信息域各24字節(jié),那么整個(gè)文件頭共76字節(jié)。

    ②碎片整理文件頭信息表:每個(gè)活動(非刪除)的文件在進(jìn)行碎片整理時(shí)在這個(gè)表里創(chuàng)建一個(gè)表項(xiàng),每個(gè)表項(xiàng)64字節(jié)。

    ③碎片整理前后的扇區(qū)CRC32值表:保存文件整理前后的CRC32值,總的字節(jié)數(shù)約為文件所占扇區(qū)數(shù)的4倍。

    ④空閑塊:用來在碎片整理過程中備份當(dāng)前整理扇區(qū)數(shù)據(jù)。

    【嵌入式系統(tǒng)中的線性Flash文件系統(tǒng)設(shè)計(jì)】相關(guān)文章:

    嵌入式系統(tǒng)中的Flash存儲管理03-18

    UML 在嵌入式系統(tǒng)設(shè)計(jì)中的應(yīng)用03-18

    嵌入式系統(tǒng)中的PS/2接口設(shè)計(jì)11-22

    嵌入式系統(tǒng)中的CACHE問題03-19

    嵌入式Linux系統(tǒng)中的GUI系統(tǒng)的研究與移植03-18

    嵌入式系統(tǒng)中“軟外設(shè)”的研究03-19

    嵌入式系統(tǒng)中的內(nèi)存壓縮技術(shù)03-18

    ARM7TDMI-S在嵌入式系統(tǒng)中的Bootloader代碼設(shè)計(jì)03-18

    面向?qū)ο蟮那度胧较到y(tǒng)設(shè)計(jì)方法03-18

    主站蜘蛛池模板: 国内精品久久久久久麻豆| 久久精品国产亚洲5555| 国产精品高清在线观看| 精品国产乱码久久久久久1区2区 | 精品四虎免费观看国产高清午夜| 夜夜爽一区二区三区精品| 精品国产福利盛宴在线观看| 日韩一级精品视频在线观看| 99国产欧美久久久精品蜜芽| 亚洲精品~无码抽插| 四虎国产精品永免费| wwwvr高清亚洲精品二区| 91精品美女在线| 精品国产一区二区三区无码| 亚洲精品无码鲁网中文电影| 色偷偷88欧美精品久久久| 精品一区二区三区高清免费观看| 91国内揄拍国内精品对白不卡| 国产精品专区第二| 国产99久久精品一区二区| 国产精品国色综合久久| 精品亚洲成a人片在线观看少妇 | 久久精品成人| 精品国精品国产自在久国产应用男| 99久久国产综合精品五月天喷水 | 亚洲精品专区| 亚洲AV无码乱码精品国产| 久久久久九国产精品| 国产精品亚洲精品日韩已方| 四虎影视国产精品亚洲精品hd| 久久精品国产半推半就| 久久青青草原精品影院| 久久青青草原精品影院| 亚洲精品国产成人99久久| 国产99视频精品免费视频76 | 精品亚洲综合在线第一区| 精品国产美女福利到在线不卡| 国内精品51视频在线观看| 久久精品国产精品青草| 99久久精品免费看国产免费| 国产国拍亚洲精品福利|