一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看

嵌入式系統中的線(xiàn)性Flash文件系統設計

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

嵌入式系統中的線(xiàn)性Flash文件系統設計

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

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

1 線(xiàn)性文件系統

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

圖1 Flash文件系統空間

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

陰影部分是文件頭,數據結構如下:

struct hdr{

unsigned short hdrsize; /*文件頭字節數*/

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

long filsize; /*文件大小*/

long flags; /*描述文件的標識*/

unsigned long filcrc; /*文件數據的CRC32的值*/

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

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

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

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

};

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

struct defraghdr{

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

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

long filsize; /*文件大小*/

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

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

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

long nesn; /*新的文件尾的扇區號*/

long neso; /*新的文件尾的扇區偏移量*/

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

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

};

struct sectorcrc{

unsigned long precrc; /*碎片整理前扇區數據CRC32的值*/

unsigned long postcrc; /*碎片整理后扇區數據CRC32的值*/

};

從上面介紹可知,除了文件數據之外,文件系統還需要如下4種額外的開(kāi)銷(xiāo)。

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

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

③碎片整理前后的扇區CRC32值表:保存文件整理前后的CRC32值,總的字節數約為文件所占扇區數的4倍。

④空閑塊:用來(lái)在碎片整理過(guò)程中備份當前整理扇區數據。

【嵌入式系統中的線(xiàn)性Flash文件系統設計】相關(guān)文章:

嵌入式系統中的Flash存儲管理03-18

UML 在嵌入式系統設計中的應用03-18

嵌入式系統中的PS/2接口設計11-22

嵌入式系統中的CACHE問(wèn)題03-19

嵌入式Linux系統中的GUI系統的研究與移植03-18

嵌入式系統中“軟外設”的研究03-19

嵌入式系統中的內存壓縮技術(shù)03-18

ARM7TDMI-S在嵌入式系統中的Bootloader代碼設計03-18

面向對象的嵌入式系統設計方法03-18

一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看