一種基于flash數據的文件系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種基于flash數據的文件系統(tǒng),將flash數據劃分為四種數據塊,包括第一文件塊、第二文件塊、第一目錄塊和第二目錄塊。本發(fā)明將flash數據劃分為四種數據塊,第一文件塊、第二文件塊、第一目錄塊和第二目錄塊組成的文件系統(tǒng)比較適合于儲存空間較小的flash,通過分塊降低數據丟失、破壞造成的損失。
【專利說明】
一種基于f I ash數據的文件系統(tǒng)
技術領域
[0001]本發(fā)明涉及文件系統(tǒng)技術領域,特別是指一種基于flash數據的文件系統(tǒng)。
【背景技術】
[0002]在嵌入領域,傳統(tǒng)的文件系統(tǒng)完全基于Flash存儲,需要使用Iinux或Wince等操作系統(tǒng)的文件管理系統(tǒng)對文件系統(tǒng)進行管理。由于FLASH的固有的特點(需要扇區(qū)擦除、而且使用受命很短,只有10萬次),對文件進行管理時,要么對Flash造成損壞,要么就需要大量的存儲空間循環(huán)存儲機制存儲每個文件的文件目錄(包括:讀寫指針、文件物理地址等文件相關的描述信息),使得文件系統(tǒng)管理復雜且維護麻煩很容易出錯;同時文件的讀取速度降低,而且造成FLASH存儲空間大大浪費。而且基于flash做的文件系統(tǒng),在將數據寫入flash的過程中,可能因為某些原因(比如斷電)導致數據丟失、破壞等異常情況。
【發(fā)明內容】
[0003]本發(fā)明提出一種基于flash數據的文件系統(tǒng),占用的儲存空間小,通過分塊降低數據丟失、破壞造成的損失。
[0004]本發(fā)明的技術方案是這樣實現的:
[0005]—種基于flash數據的文件系統(tǒng),將flash數據劃分為四種數據塊,包括第一文件塊、第二文件塊、第一目錄塊和第二目錄塊,第一文件塊包括依次排列的第一name數據段、第一 next數據段、第一 parent數據段和第一 data數據段,第一 name數據段用于記錄文件名稱,第一next數據段用于保存與其相鄰的下個數據塊的索引,第一parent數據段用于保存當前第一文件塊所在目錄的索引,第一data數據段用于保存部分文件數據;第二文件塊用于保存剩余部分文件數據;第一目錄塊包括第二name數據段、第三next數據段、第二parent數據段和第三data數據段,第二name數據段用于記錄目錄名稱,第三next數據段用于記錄與當前第一目錄塊相鄰的下個目錄塊的索引,第三data數據段用于保存部分當前目錄下的子目錄和文件的索引,第二目錄塊用于保存剩余部分當前目錄下的子目錄和文件的索引。
[0006]進一步的,第二文件塊包括第一prev數據段、第二 next數據段和第二 data數據段,第一prev數據段用于保存與當前第二文件塊相鄰的上個數據塊的索引,第二next數據段用于保存與當前第二文件塊相鄰的下個數據塊的索引,第二data數據段用于保存剩余部分文件數據。
[0007]進一步的,第二目錄塊包括第二prev數據段、第四next數據段和第四data數據段,第二prev數據段用于保存與當前第二目錄塊相鄰的上個數據塊的索引,第四next數據段用于當前第二目錄塊相鄰的下個數據塊的索引,第四data數據段用于保存剩余部分目錄數據。
[0008]進一步的,第一文件塊、第二文件塊、第一目錄塊和第二目錄塊均在數據塊的尾部設有CRC數據段,CRC數據段保存有四字節(jié)的數據,用于對第一文件塊、第二文件塊、第一目錄塊和第二目錄塊進行分塊校驗。
[0009]進一步的,在向第一文件塊、第二文件塊、第一目錄塊和第二目錄塊存儲數據時,通過(^(: = 501(_0^((1&七&),計算出一個四字節(jié)的數值,保存到CRC數據段;
[0010]在從第一文件塊、第二文件塊、第一目錄塊和第二目錄塊任一數據塊中讀取數據的時候,先通過116¥_(31^ = 301(_0^((^七3),計算出一個四字節(jié)的數值,然后再讀取0^數據段,判斷crc = =new_crc,若不相等,說明數據被破壞了,應丟棄該數據塊,若相等,則按照數據塊相應的格式初始化數據,若所有數據塊均完成初始化后,則有效的文件系統(tǒng)已完成。
[0011]進一步的,第一文件塊和第二文件塊通過第一next數據段和第一 prev數據段建立雙向鏈表結構,第二文件塊和第二文件塊之間通過第一 prev數據段和第二 next數據段建立雙向鏈表結構。
[0012]進一步的,第一目錄塊和第二目錄塊通過第二next數據段和第二prev數據段建立雙向鏈表結構,第二目錄塊和第二目錄塊之間通過第二prev數據段和第四next數據段建立雙向鏈表結構。
[0013]進一步的,第一文件塊和第一目錄塊通過第一parent數據段和第三data數據段建立雙向鏈表結構。
[0014]進一步的,第一目錄塊和第一目錄塊之間通過第一parent數據段和第三data數據段建立雙向鏈表結構。
[0015]本發(fā)明的有益效果在于:本發(fā)明將flash數據劃分為四種數據塊,第一文件塊、第二文件塊、第一目錄塊和第二目錄塊組成的文件系統(tǒng)比較適合于儲存空間較小的flash,通過分塊降低數據丟失、破壞造成的損失。
【附圖說明】
[0016]為了更清楚地說明本發(fā)明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。
[0017]圖1為本發(fā)明一種基于flash數據的文件系統(tǒng)的組成結構示意圖;
[0018]圖2為圖1中四種數據塊的組成結構示意圖;
[0019]圖3為圖1中四種數據塊初始化之前的組成結構示意圖。
【具體實施方式】
[0020]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0021]如圖1-圖3所示,本發(fā)明提出了一種基于flash數據的文件系統(tǒng),將flash數據劃分為四種數據塊,包括第一文件塊、第二文件塊、第一目錄塊和第二目錄塊,第一文件塊包括依次排列的第一 name數據段、第一 next數據段、第一 parent數據段和第一 data數據段,第一name數據段用于記錄文件名稱,第一 next數據段用于保存與其相鄰的下個數據塊的索引,第一parent數據段用于保存當前第一文件塊所在目錄的索引,第一data數據段用于保存部分文件數據;第二文件塊用于保存剩余部分文件數據;第一目錄塊包括第二name數據段、第三next數據段、第二 parent數據段和第三data數據段,第二 name數據段用于記錄目錄名稱,第三next數據段用于記錄與當前第一目錄塊相鄰的下個目錄塊的索引,第三data數據段用于保存部分當前目錄下的子目錄和文件的索引,第二目錄塊用于保存剩余部分當前目錄下的子目錄和文件的索引。
[0022]第一文件塊和第二文件塊可分別標記為FiIeBlockA和FiIeBlockB,第一目錄塊和第二目錄塊可分別標記為DirBlockA和DirblockB。
[0023]第二文件塊包括第一prev數據段、第二 next數據段和第二 data數據段,第一 prev數據段用于保存與當前第二文件塊相鄰的上個數據塊的索引,第二next數據段用于保存與當前第二文件塊相鄰的下個數據塊的索引,第二data數據段用于保存剩余部分文件數據。
[0024]第二目錄塊包括第二prev數據段、第四next數據段和第四data數據段,第二prev數據段用于保存與當前第二目錄塊相鄰的上個數據塊的索引,第四next數據段用于當前第二目錄塊相鄰的下個數據塊的索引,第四data數據段用于保存剩余部分目錄數據。
[0025]將四種不同類型的數據塊組織起來,構成一個完整的文件系統(tǒng),本發(fā)明適用于存儲空間小的flash,本發(fā)明主要實現了在一塊flash上建立一個文件系統(tǒng),可以支持基本的文件操作(創(chuàng)建文件、目錄,打開文件并讀寫內容等),并且對flash數據進行分塊校驗,可以有效的防止因為部分文件內容被破壞而導致整塊flash無法使用。
[0026]如圖3所示,還未初始化的數據塊包括data數據段和CRC數據段。從外部讀取的數據,不進過效驗直接使用會引起未知異常,效驗之后,可以保證數據沒有被破壞,還是按照原來的格式保存,排除異常。
[0027]第一文件塊、第二文件塊、第一目錄塊和第二目錄塊均在數據塊的尾部設有CRC數據段,CRC數據段保存有四字節(jié)的數據,用于對第一文件塊、第二文件塊、第一目錄塊和第二目錄塊進行分塊校驗。
[0028]在向第一文件塊、第二文件塊、第一目錄塊和第二目錄塊存儲數據時,通過crc=SDK_CRC(data),計算出一個四字節(jié)的數值,保存到CRC數據段;
[0029]在從第一文件塊、第二文件塊、第一目錄塊和第二目錄塊任一數據塊中讀取數據的時候,先通過116¥_(31^ = 301(_0^((^七3),計算出一個四字節(jié)的數值,然后再讀取0^數據段,判斷crc = =new_crc,若不相等,說明數據被破壞了,應丟棄該數據塊,若相等,則按照數據塊相應的格式初始化數據,若所有數據塊均完成初始化后,則有效的文件系統(tǒng)已完成。
[0030]第一文件塊和第二文件塊通過第一next數據段和第一 prev數據段建立雙向鏈表結構,第二文件塊和第二文件塊之間通過第一 prev數據段和第二 next數據段建立雙向鏈表結構。
[0031 ]第一目錄塊和第二目錄塊通過第二next數據段和第二prev數據段建立雙向鏈表結構,第二目錄塊和第二目錄塊之間通過第二prev數據段和第四next數據段建立雙向鏈表結構。
[0032]第一文件塊和第一目錄塊通過第一parent數據段和第三data數據段建立雙向鏈表結構。
[0033]第一目錄塊和第一目錄塊之間通過第一parent數據段和第三data數據段建立雙向鏈表結構。
[0034]值得注意的是,圖1中的parent、data、next、prev分別指的是第一文件塊、第二文件塊、第一目錄塊和第二目錄塊中的數據段的類型,比如第一目錄段DirBlockA和第二目錄段DirblockB之間有一個從DirBlockA到DirblockB的箭頭,箭頭上標注的是next,指的是第一目錄段DirBlockA中的第三next數據段,而從DirblockB到DirBlockA的箭頭上面標注的是prev,代表的是第二目錄段DirblockB中的第二prev數據段。以此類推,可得出圖1中其他標記的含義。
[0035]在圖2和圖3中,第一文件塊和第二文件塊可分別標記為Fi IeB I ο CkA和FileBlockB,第一目錄塊和第二目錄塊可分別標記為DirBlockA和DirblockB。第一行FileB1ckA后面的幾個數據段代表了FileB1ckA的數據組成,其中的幾個標記:name、next、parent和data分別代表了第一 name數據段、第一 next數據段、第一 parent數據段和第一data數據段;以此類推,可知,FiIeBlockB后的幾個標注:prev、next和data分別表示第一prev數據段、第二 next數據段和第二 data數據段;DirBlockA后的幾個標注:name、next、parent和data分別代表了第二 name數據段、第三next數據段、第二 parent數據段和第三data數據段;DirblockB后的幾個標注:prev、next和data分別表示第二 prev數據段、第四next數據段和第四data數據段。
[0036]以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。
【主權項】
1.一種基于flash數據的文件系統(tǒng),其特征在于:將所述flash數據劃分為四種數據塊,包括第一文件塊、第二文件塊、第一目錄塊和第二目錄塊,所述第一文件塊包括依次排列的第一 name數據段、第一 next數據段、第一 parent數據段和第一 data數據段,所述第一 name數據段用于記錄文件名稱,所述第一next數據段用于保存與其相鄰的下個數據塊的索引,所述第一parent數據段用于保存當前第一文件塊所在目錄的索引,所述第一data數據段用于保存部分文件數據;所述第二文件塊用于保存剩余部分文件數據;所述第一目錄塊包括第二 name數據段、第三next數據段、第二 parent數據段和第三data數據段,所述第二 name數據段用于記錄目錄名稱,所述第三next數據段用于記錄與當前第一目錄塊相鄰的下個目錄塊的索引,所述第三data數據段用于保存部分當前目錄下的子目錄和文件的索引,所述第二目錄塊用于保存剩余部分當前目錄下的子目錄和文件的索引。2.根據權利要求1所述的一種基于flash數據的文件系統(tǒng),其特征在于:所述第二文件塊包括第一 prev數據段、第二 next數據段和第二 data數據段,所述第一 prev數據段用于保存與當前第二文件塊相鄰的上個數據塊的索引,所述第二next數據段用于保存與當前第二文件塊相鄰的下個數據塊的索引,所述第二data數據段用于保存剩余部分文件數據。3.根據權利要求1所述的一種基于flash數據的文件系統(tǒng),其特征在于:所述第二目錄塊包括第二 prev數據段、第四next數據段和第四data數據段,所述第二 prev數據段用于保存與當前第二目錄塊相鄰的上個數據塊的索引,所述第四next數據段用于當前第二目錄塊相鄰的下個數據塊的索引,所述第四data數據段用于保存剩余部分目錄數據。4.根據權利要求1-3任一項所述的一種基于flash數據的文件系統(tǒng),其特征在于:所述第一文件塊、第二文件塊、第一目錄塊和第二目錄塊均在數據塊的尾部設有CRC數據段,所述CRC數據段保存有四字節(jié)的數據,用于對所述第一文件塊、第二文件塊、第一目錄塊和第二目錄塊進行分塊校驗。5.根據權利要求4所述的一種基于flash數據的文件系統(tǒng),其特征在于: 在向所述第一文件塊、第二文件塊、第一目錄塊和第二目錄塊存儲數據時,通過crc =SDK_CRC(data),計算出一個四字節(jié)的數值,保存到CRC數據段; 在從所述第一文件塊、第二文件塊、第一目錄塊和第二目錄塊任一數據塊中讀取數據的時候,先通過116¥_(31^ = 301(_0^((^七3),計算出一個四字節(jié)的數值,然后再讀取0^數據段,判斷crc = =new_crc,若不相等,說明數據被破壞了,應丟棄該數據塊,若相等,則按照數據塊相應的格式初始化數據,若所有數據塊均完成初始化后,則有效的文件系統(tǒng)已完成。6.根據權利要求2所述的一種基于flash數據的文件系統(tǒng),其特征在于:所述第一文件塊和第二文件塊通過所述第一 next數據段和所述第一 prev數據段建立雙向鏈表結構,所述第二文件塊和第二文件塊之間通過第一 prev數據段和第二 next數據段建立雙向鏈表結構。7.根據權利要求3所述的一種基于flash數據的文件系統(tǒng),其特征在于:所述第一目錄塊和第二目錄塊通過所述第二next數據段和所述第二preV數據段建立雙向鏈表結構,所述第二目錄塊和第二目錄塊之間通過第二prev數據段和第四next數據段建立雙向鏈表結構。8.根據權利要求1-3任一項所述的一種基于flash數據的文件系統(tǒng),其特征在于:所述第一文件塊和第一目錄塊通過所述第一parent數據段和所述第三data數據段建立雙向鏈表結構。9.根據權利要求8任一項所述的一種基于flash數據的文件系統(tǒng),其特征在于:所述第一目錄塊和第一目錄塊之間通過所述第一parent數據段和所述第三data數據段建立雙向鏈表結構。
【文檔編號】G06F17/30GK105868285SQ201610169021
【公開日】2016年8月17日
【申請日】2016年3月23日
【發(fā)明人】徐佳宏, 陽柳郴
【申請人】深圳市茁壯網絡股份有限公司