楊利
摘 要:Exfat文件系統(tǒng)是大容量移動存儲設備文件系統(tǒng)的新寵,由于其操作簡便、支持超大文件等突出特點,應用越來越廣泛。該文在研究exfat文件系統(tǒng)結(jié)構特點的基礎上,成功將exfat文件系統(tǒng)移植到基于ucos-II嵌入式操作系統(tǒng)的開發(fā)平臺上,使得運行該操作系統(tǒng)的電子產(chǎn)品可以方便地實現(xiàn)音視頻播放等功能,極大的增加了產(chǎn)品的多樣性,因此該研究成果具有非常好的現(xiàn)實意義。經(jīng)過測試證明,移植后的exfat文件系統(tǒng)在功能和效率上都達到了預期的目標。
關鍵詞:ucos-II exfat 文件系統(tǒng)
中圖分類號:TP316 文獻標識碼:A 文章編號:1672-3791(2015)02(b)-0011-02
Exfat文件是微軟繼FAT、NTFS桌面文件系統(tǒng)后推出的全新文件系統(tǒng),由于其特殊的結(jié)構,解決了FAT文件系統(tǒng)不能支持大文件、NTFS文件系統(tǒng)對硬盤讀寫頻繁等問題,是目前大容量移動存儲設備文件系統(tǒng)的首選。ucos-II嵌入式文件系統(tǒng)由于其開放性、免費性及精簡性等特點,成為許多中小企業(yè)作為電子產(chǎn)品研發(fā)平臺的選擇。隨著電子技術的發(fā)展,幾乎所有的電子產(chǎn)品都要求具備多媒體播放等功能,而這些功能都需要有文件系統(tǒng)的支持,因此在ucos-II嵌入式操作系統(tǒng)平臺下探索如何實現(xiàn)exfat文件系統(tǒng),具有很好的現(xiàn)實意義。
1 Ucos-II內(nèi)核簡介
Ucos-II是基于優(yōu)先級搶占的實時嵌入式操作系統(tǒng),具有內(nèi)核源碼完全開放且共享資源豐富的特點。ucos-II內(nèi)核由核心、任務處理、時間處理、任務同步與通信等4個部分,總共有5 500行代碼。其中oscore.c源碼是內(nèi)核的處理核心,完成初始化、操作系統(tǒng)運行、中斷進出的前導、時鐘節(jié)拍、任務調(diào)度、事件處理等工作。ostask.c是任務處理部分的源碼,包括任務的建立、刪除、掛起、恢復等函數(shù)。任務處理部分中的內(nèi)容都是與任務的操作密切相關的,ostime.c是時鐘處理源碼,任務延時等操作是在這里完成的。ucos-II操作系統(tǒng)啟動和多任務的調(diào)度關鍵在于時鐘節(jié)拍處理函數(shù),實際上是一個中斷服務程序,是嵌入式系統(tǒng)定時器定時時間到指向的中斷服務程序。任務間的通訊與同步包括事件機制、消息隊列、信號量集,分別用于兩個任務之間、一個任務與多個任務之間、多個任務與多個任務之間的通訊。
2 Exfat文件系統(tǒng)簡介
Exfat是為大容量移動存儲設備而生的文件系統(tǒng),提高了單個文件的大小,使得單個文件最大為32EB,從而加強了存儲設備和電腦直接的互操作性。并且exfat保留了fat文件系統(tǒng)的操作簡便性,克服了NTFS的損害硬件的缺點,使得其成為移動存儲設備上文件系統(tǒng)的新寵。
Exfat文件系統(tǒng)的結(jié)構見圖1。
其中VBR是啟動扇區(qū),指卷的物理0扇區(qū),它記錄了該卷的相關信息,其具體結(jié)構可以參照參考文獻[3],該文就不重復敘述。
上電啟動后操作系統(tǒng)會最先讀取VBR啟動扇區(qū)的內(nèi)容,通過分析VBR的內(nèi)容,可以很清楚地定位FAT表、根目錄、數(shù)據(jù)區(qū)的位置,從而也很容易查找到任一指定名的文件。
通常一簇為32個扇區(qū),一個扇區(qū)為512字節(jié)。簇0除了存放VBR外,其余均為保留扇區(qū);簇1存放Fat表;簇2、簇3分別存放簇位圖文件和大寫字符文件,其中簇位圖表征簇的使用情況,為1表示該簇占用,為0表示該簇空閑;簇4為根目錄使用,所以數(shù)據(jù)一般從簇5開始。
FAT32文件系統(tǒng)采用32字節(jié)來記錄目錄項,在exFAT中,目錄項大小仍然是32字節(jié),不過結(jié)構上已經(jīng)做出了重大的改變,目錄項的第一個字節(jié)表示的是該目錄項的類型,不同的目錄類型有不同的目錄結(jié)構,常見的目錄項有81H、85H、C0、C1、C2等,目錄項的結(jié)構請參照參考文獻3和4。
一個目錄,可以由多個不同的目錄類型組成,因為不同的目錄類型有不同的目錄結(jié)構,這樣雖然一個目錄項只有32個字節(jié)表示,但其代表的信息量遠比FAT32目錄項的結(jié)構豐富得多。
3 在ucos-II內(nèi)核中實現(xiàn)
3.1 實現(xiàn)思路
在ucos-II內(nèi)核中實現(xiàn)exfat文件系統(tǒng)的前提是先搭建文件系統(tǒng)的框架,這是該課題的準備工作,不在此敘述,可參照參考文獻1和2。
根據(jù)exfat結(jié)構的分析,要實現(xiàn)exfat文件系統(tǒng),核心工作就是先創(chuàng)建相關的數(shù)據(jù)結(jié)構,如VBR、目錄項、目錄類型等;然后根據(jù)對文件操作的需求,編寫相關的操作函數(shù),如打開、讀寫、關閉文件等,命名以exfat_打頭。如打開文件函數(shù)命名為exfat_openfile;最后將這些exfat文件操作函數(shù)和ucos-II的文件系統(tǒng)關聯(lián)起來,例如當操作系統(tǒng)上層調(diào)用openfile函數(shù)時,如果此時存儲設備的文件系統(tǒng)格式為exfat,那么openfile函數(shù),最終會調(diào)用下層的exfat_openfile函數(shù)來完成具體的操作。
3.2 重要數(shù)據(jù)結(jié)構及函數(shù)
3.2.1 0扇區(qū)VBR
struct exfat_super_block {
__u8 jmp_boot[3]; /* boot strap short or near jump */
__u8 oem_id[8]; /* oem-id */
__u8 unused0;
__u32 unused1[13];
__le64 start_sector; /* start sector of partition */
__le64 nr_sectors; /* number of sectors of partition */
/*0x50*/__le32 fat_blocknr; /* start blocknr of FAT */
__le32 fat_block_counts; /* number of FAT blocks */
......
}
3.2.2 函數(shù)列表
unsigned int fsapitbl[]={
(unsigned int)FS_FOpen,
(unsigned int)FS_FClose,
(unsigned int)FS_FRead,
(unsigned int)FS_FWrite,
(unsigned int)FS_GetLength,
(unsigned int)FS_GetTime,
(unsigned int)FS_ConvertName,
......
};
3.3 測試與驗證
該課題采用黑盒測試的方法來驗證文件系統(tǒng)的功能,如要驗證FS_CopyDir函數(shù)(拷貝目錄)的正確性,可以在U盤下拷貝任一大小的文件夾,然后在ucos嵌入式平臺上執(zhí)行該函數(shù),最后在電腦上用文件比較器軟件來比較前后兩文件夾的內(nèi)容是否一樣。
經(jīng)過反復多次的黑盒測試證明,該文移植后的exfat文件系統(tǒng)基本上實現(xiàn)了windows下exfat的全部功能,完全滿足了ucos-II嵌入式操作系統(tǒng)平臺上的使用。
4 結(jié)語
該文經(jīng)過不斷的研究探索,終于在ucos-II嵌入式操作系統(tǒng)平臺下實現(xiàn)了exfat文件的基本功能。該成果對于使用ucos-II操作系統(tǒng)來開發(fā)電子產(chǎn)品的用戶來說,具有非常好的現(xiàn)實意義,利用該成果,產(chǎn)品可以識別并讀寫文件系統(tǒng)格式為exfat的大容量移動存儲設備,從而為多媒體文件的處理提供了可能。
參考文獻
[1] 諶愛文,陳仕許.初探在ucos-II上實現(xiàn)大容量內(nèi)存文件系統(tǒng)[J].懷化學院學報,2006(2):110-112.
[2] 王命延,余愛軍.一種加載在uCOS-II內(nèi)核上的嵌入式文件系統(tǒng)[J].南昌大學學報,2005(2):197-199,204.
[3] 史久根,王躍,韓江洪.exFAT文件系統(tǒng)的優(yōu)化模型[J].計算機工程,2009(16):54-55,58.
[4] 朱晨.電子詞典中文件系統(tǒng)的設計與實現(xiàn)[D].成都:電子科技大學,2012.