ARM7系統(tǒng)中CF卡存儲(chǔ)的文件系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)
為了達(dá)到這些目的,我們針對(duì)不同CPU的不同處理方法,對(duì)硬件操作程序進(jìn)行分離,將設(shè)備有關(guān)的底層程序變成與設(shè)備無關(guān)的上層操作。這樣,當(dāng)系統(tǒng)新增功能之后,不必更改每個(gè)子程序,只需要在某些接口文件的數(shù)據(jù)結(jié)構(gòu)中添加或者更改數(shù)據(jù)項(xiàng)即可;又考慮到用戶對(duì)上層操作的透明性,我們采用面向?qū)ο蟮姆椒?,上層結(jié)構(gòu)中存取操作的Driver結(jié)構(gòu)(含Read、Write數(shù)據(jù)項(xiàng))是虛擬的,在底層才將它具體化為CF卡的讀寫扇區(qū)命令(操作碼為:20h、30h)。
軟件程序的主要流程如圖3所示。
2 系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)
根據(jù)上述原理,可完成軟件設(shè)計(jì),其基本框架如圖4所示,分為六個(gè)主要部分。
其中,CF卡驅(qū)動(dòng)程序設(shè)計(jì)的關(guān)鍵是CF卡的存取操作函數(shù)所采用的命令碼有些不同。另外,我們使用驅(qū)動(dòng)程序?qū)ο髞泶鞢F卡設(shè)備驅(qū)動(dòng)程序。該驅(qū)動(dòng)程序?qū)ο髮?duì)于用戶是部分不透明的,數(shù)據(jù)項(xiàng)包括讀寫函數(shù)的指針,這些函數(shù)由文件系統(tǒng)程序輸出(包括兩部分函數(shù),用戶可見API函數(shù)調(diào)用和用戶不見驅(qū)動(dòng)存取函數(shù))。此對(duì)象的數(shù)據(jù)結(jié)構(gòu)聲明如下:
Typedef Struct CF_XFILE_DRIVER{
BYTE Driver_name; /*介質(zhì)標(biāo)示;CF卡、IDE硬盤、Flash卡、RAMDISK等,刪除驅(qū)動(dòng)的話,需要重新記錄DRIVER號(hào)*/
…… /*IRP處理函數(shù)*/
}CF_XFILE_DRIVER;
如果有多個(gè)CF卡,需要用另外一個(gè)特定的數(shù)據(jù)結(jié)構(gòu)Next_Driver來把它們水平連接在一起。然后,用鏈表來管理這些數(shù)據(jù)結(jié)構(gòu),管理方式類似于WDM(Windows Driver Model)。
3 測(cè)試分析
經(jīng)過調(diào)試運(yùn)行,該文件系統(tǒng)性能良好。與我們之前已經(jīng)移植過的Nucleus、ΜC/OS- II、UNIX的操作系統(tǒng)的文件系統(tǒng)相比,本文介紹的文件系統(tǒng)可移植性更強(qiáng);除了文中著重介紹的CF卡,經(jīng)過對(duì)底層驅(qū)動(dòng)的簡(jiǎn)單修改就可以應(yīng)用于其它存儲(chǔ)介質(zhì)如RAMdisk、IDE硬盤、Flash等(其中IDE硬盤和Flash也已經(jīng)調(diào)試成功)。另外,本文介紹的文件系統(tǒng)對(duì)硬件平臺(tái)的配置要求降低,并且對(duì)于文件操作的運(yùn)行速度并未減慢。
評(píng)論