在基于WinCE的嵌入式系統中,通常NandFlash + FAT文件系統是最為常用的數據存儲方式。對這類設備長期運行情況的跟蹤,我們發現在一定的應用情況下,FAT文件系統存在失效的可能,而文件系統的失效導致系統在重啟中不能讀取系統注冊表或應用程序文件,宏觀的現象就是設備不能正常運行。
經過對FAT文件失效情況的分析,我們發現出現失效的系統往往有以下兩種文件操作:
1、需要保存運行日志文件,每條日志記錄大約兩百字節水平,整個日志文件可包含上萬條記錄,即日志文件大小在2MB水平。應用程序對日志的操作是隨機的。
2、系統有一個容量上兆的配置文件,應用程序可能根據運行的情況,動態修改配置的內容。
以上這兩種文件操作,對NandFlash + FAT的存儲單位,由于文件都比較大,都可能導致大規模的NandFlash塊擦除及數據搬動。當此時CPU負載還比較重時,FAT文件系統內部的某種缺陷就可能暴露出來,從而危害設備的穩定運行。
針對上述兩種應用的特點,以規避FAT文件系統出現致命缺陷為目的,我們設計了一層新的文件操作API函數,來替代常規的文件API函數。新的API包括以下6個函數:
? HANDLE CreateFileEm(……);
? BOOL ReadFileEm(……);
? BOOL WriteFileEm(……);
? DWORD SetFilePointerEm(……);
? DWORD GetFileSizeEm(……);
? BOOL CloseHandleEm(……);
這6個API函數的名稱與對應的常規函數名稱基本一致,只是在末尾增加了“Em”兩個字母以示區別,函數的參數與常規函數的參數則完全一致。應用程序只需做簡單的修改,就可使用我們所提供的新方法。
新的文件操作的要點,是把一個日志文件或配置文件,映射為NandFlash下的子目錄,文件的內容則分成若干個子文件(以下稱為量子文件,以表示它的不可分割性),量子文件按序號0000依次遞增9999,每個量子文件的大小為NandFlash的扇區大小,在英創工控主板中NandFlash的扇區Size為2KB,當前量子文件寫滿2KB后,會自動生成當前序號+1的新量子文件。API內部建有當前量子文件的數據緩沖區,當讀寫僅限于當前量子文件大小(即2KB)時,不會產生實質性的NandFlash讀寫,從而降低NandFlash的讀寫負擔。即使進行實質性的寫操作,因為總是2KB,FAT文件系統的工作量也被降到最低。
新的API函數盡管可支持不同線程操作同一文件,但若出現不同線程對同一個量子文件進行讀寫操作,則可能存在數據丟失的情況、讀取的數據不是最新數據的情況。因此應用程序應盡量避免不同線程對同一個量子文件進行讀寫操作。
在200MHz主頻的CE5.0系統中(如 EM9160、EM9360等),新API函數的文件寫操作的平均速度在90KB/s – 95KB/s范圍,文件讀操作的平均速度在600KB/s – 700KB/s范圍。
一般情況下若寫入的數據處在一個量子文件大小區域內,為了提高NandFlash的操作效率,不會立即觸發實質性的NandFlash寫。但之后一定時間內(設置為2秒),沒有進一步的寫操作,新API的后備線程會自動把應用程序寫入的數據實質性寫入NandFlash的對應量子文件中。因此這里存在,在實質性寫入發生之前,系統由于某種情況出現重啟(Power Cycling),應用程序寫入的數據就會丟失的情況。這是為避免致命性錯誤,應用程序需付出的代價。
更極端的情況,當正在實質性寫某一量子文件時,系統出現Power Cycling,還可能存在該量子文件被破壞的情況。但這種情況在常規寫中同樣存在,且被破壞的還是整個文件。因此新API是Power Cycling對整個數據的損壞度是降低了的。
更重要的是,在系統進入穩定運行后,量子文件的數目瞬間不會有大的變化,甚至完全沒有變化(配置文件情形,或日志文件達到應用程序設置的上限),這樣新的API對FAT文件系統的FAT表、目錄區的負載會降到最低,從而大大避免FAT文件系統的關鍵區域被Power Cycling破壞的可能性。這是新API規避FAT文件系統缺陷的關鍵所在。
新API的定義包含在“LogFile.h”頭文件中,具體實現代碼則在“LogFile.cpp”中,對客戶應用程序,只需簡單的把LogFile.cpp加入到應用程序中,并在相關的cpp文件中include頭文件LogFile.h,就可方便的測試評估該方法了。
-
嵌入式系統
+關注
關注
41文章
3665瀏覽量
130888
發布評論請先 登錄
飛凌嵌入式ElfBoard ELF 1板卡-uboot常用命令之文件系統命令
NFS網絡文件系統深度解析
防止根文件系統破壞,OverlayRootfs 讓你的設備更安全

EE-329:在SHARC處理器上運行FAT16文件系統和DOS命令

EE-289:在ADSP-BF533 Blackfin處理器上實現FAT32文件系統

國產工控主板,信創產業發展新引擎
中科創達榮獲2024年軟件和信息技術服務優秀企業
Linux根文件系統的掛載過程
信創國產化背景下的工控主板發展現狀
linux--sysfs文件系統

評論