在基于嵌入式操作系統(tǒng)的工程機(jī)械智能監(jiān)控器的開發(fā)過(guò)程中,完成了文件系統(tǒng)的移植,將周立功公司的ZLG/FS文件系統(tǒng)經(jīng)過(guò)一系列修改,嵌入到監(jiān)控器的系統(tǒng)程序里運(yùn)行。文件系統(tǒng)的硬件平臺(tái)選用三星公司的Nand Flash芯片K9F2808,作為文件系統(tǒng)的硬件依托。文件系統(tǒng)移植完后該芯片就成為系統(tǒng)硬盤,用來(lái)存儲(chǔ)系統(tǒng)程序和字庫(kù)文件等。
文件系統(tǒng)是操作系統(tǒng)中組織、存取和保護(hù)數(shù)據(jù)的一個(gè)重要部分,文件系統(tǒng)的主要目標(biāo)是提高存儲(chǔ)器的利用率,接受用戶的委托實(shí)施對(duì)文件的操作。在本工程機(jī)械智能監(jiān)控器項(xiàng)目開發(fā)之初,文件系統(tǒng)這部分設(shè)計(jì)是由合作方北京航空航天大學(xué)完成的,當(dāng)時(shí)使用的嵌入式文件系統(tǒng)是μC/OS—II。我方接手以后,對(duì)該文件系統(tǒng)進(jìn)行了分析研究,發(fā)現(xiàn)該文件系統(tǒng)雖然能用,但是有些地方不夠完善,存在一些問(wèn)題和隱患:比如μC/OS-II內(nèi)存占用比較大,且效率不高等。因此,又從網(wǎng)上下載了周立功文件系統(tǒng)(ZLG/FS),發(fā)現(xiàn)其非常適合監(jiān)控器項(xiàng)目的使用,并且具備如下特點(diǎn):
①高度兼容FAT12、FAT16、FAT32;
②可移植;
③支持多任務(wù)操作系統(tǒng);
④兼容多種介質(zhì)。
ZLG/FS采用模塊化層次結(jié)構(gòu)設(shè)計(jì),并使用底層驅(qū)動(dòng)程序來(lái)兼容不同的硬件結(jié)構(gòu)和不同的介質(zhì)。共包括6個(gè)模塊:應(yīng)用程序模塊、文件管理與目錄管理模塊、文件分配表管理與文件目錄表管理模塊、邏輯盤管理模塊、高速緩存(Cache)管理模塊、底層驅(qū)動(dòng)程序模塊。最終決定將該文件系統(tǒng)移植到智能監(jiān)控器系統(tǒng)上面。
本系統(tǒng)采用目標(biāo)機(jī)+宿主機(jī)的開發(fā)模式,目標(biāo)平臺(tái)是ARM S3C44B0,宿主機(jī)是PC機(jī)+μC/OS-II操作系統(tǒng)。S3C44B0是基于ARM7TDMI內(nèi)核的32位微控制器,它是三星公司專門為PDA、Internet設(shè)備和手持設(shè)備等開發(fā)的微處理器。該芯片還包含有8 KB的Cache,這一特性使開發(fā)人員能夠?qū)ⅵ藽/OS-II操作系統(tǒng)移植到基于該處理器的目標(biāo)系統(tǒng)中。
2 文件系統(tǒng)在智能監(jiān)控器系統(tǒng)上面的移植過(guò)程
2.1 底層驅(qū)動(dòng)程序的編寫
硬件上,將三星公司的Nand Flash芯片K9F2808開發(fā)為系統(tǒng)硬盤。需要編寫兩部分的驅(qū)動(dòng)程序:一是關(guān)于該Flash芯片的驅(qū)動(dòng)程序,也就是對(duì)該芯片最底層的最基本的操作,建立文件Flash.c,包括Flash復(fù)位、讀Flash ID號(hào)、擦除Flash的一塊、讀扇區(qū)、寫扇區(qū)等函數(shù),這部分函數(shù)代碼由芯片公司提供;二是關(guān)于文件系統(tǒng)的基礎(chǔ)操作,創(chuàng)建文件K9F2808.c,它調(diào)用flash.c里面的函數(shù),為上層的程序提供一個(gè)與底層無(wú)關(guān)的接口。
文件K9F2808.c主要包括以下函數(shù):創(chuàng)建FAT12、創(chuàng)建根目錄、格式化Flash盤、將MBR寫到盤里等。在格式化Flash盤這個(gè)函數(shù)里,首先要調(diào)用Flash復(fù)位的函數(shù),然后擦除Flash盤的第0個(gè)Block,擦除成功以后,將MBR的內(nèi)容寫入該Block的第一個(gè)Page里,這是Flash盤的引導(dǎo)扇區(qū),寫入的MBR包含了該盤的一些基本信息。至此,完成了格式化盤的第一步,為后面繼續(xù)格式化打下基礎(chǔ)。
下一步就是要?jiǎng)?chuàng)建FAT12,用兩個(gè)扇區(qū)(即兩個(gè)Page)作FAT區(qū),并將其內(nèi)部單元全部初始化為00H,相繼的2個(gè)扇區(qū)作FAT區(qū)的備份。接下來(lái),把第1個(gè)Block擦除掉,然后在這個(gè)Block里創(chuàng)建該盤文件系統(tǒng)的根目錄,并將根目錄區(qū)初始化為00H。這樣就把一個(gè)Flash盤給格式化為FAT12文件系統(tǒng)格式。但是還不能往盤里存東兩,因?yàn)檫€需要一些文件系統(tǒng)上層的管理。
在K9F2808.c這個(gè)文件里,函數(shù)K9F2808(uint8 Cammand,vold*Parameter)是底層驅(qū)動(dòng)程序與上層的接口函數(shù),第一個(gè)參數(shù)代表要對(duì)該盤進(jìn)行操作的命令,比如磁盤初始化、關(guān)閉磁盤、讀扇區(qū)、寫扇區(qū)等;第二個(gè)參數(shù)是一個(gè)結(jié)構(gòu)體,它包含了當(dāng)前操作的磁盤的一些讀寫基本信息。在文件系統(tǒng)的上層程序里這個(gè)函數(shù)將被頻繁調(diào)用。
2.2 邏輯盤管理的程序移植
這是底層驅(qū)動(dòng)程序上面一層的程序,文件名是disk.c,其中主要包含:磁盤初始化、讀取磁盤信息、獲取空盤信息、增加一個(gè)驅(qū)動(dòng)程序。刪除一個(gè)驅(qū)動(dòng)程序等函數(shù)。這部分程序勿需改變,可以原封不動(dòng)地延用ZLG—FS里提供的程序,在此不再贅述。
2.3 高速緩存管理的程序移植
這是FAT文件系統(tǒng)關(guān)于Cache管理的部分,文件名是RWSec.c,主要包括:初始化磁盤Cache、解鎖指定Cache(允許切換出內(nèi)存)、把指定扇區(qū)寫回邏輯盤、把指定Cache寫回邏輯盤、把所有已改變的扇區(qū)寫回邏輯盤、從內(nèi)存獲取一個(gè)Cache、為邏輯盤上的一個(gè)扇區(qū)打開一個(gè)Cache并鎖定、從邏輯盤讀取一個(gè)扇區(qū)、指定邏輯盤的指定一個(gè)扇區(qū)被改寫等。除了極個(gè)別的地方需要稍做修改外,這部分函數(shù)基本上都延用ZLG—FS里提供的程序。
2.4 文件分配表管理(FAT)的移植
文件Fat.c主要是FAT文件系統(tǒng)的文件分配表基本操作函數(shù),包括:返回FAT表指定簇的下一個(gè)簇號(hào)、分配下一個(gè)簇、為指定簇鏈增加一個(gè)簇、刪除指定簇鏈。這些函數(shù)可以放心大膽地使用,不需要修改。
2.5 文件目錄表管理(FDT)的移植
文件Fdt.c是關(guān)于FAT文件系統(tǒng)的文件分配表基本操作程序。主要包括:將指定簇所有數(shù)據(jù)清零,讀取FDT信息,寫FDT信息,獲取根目錄指定文件(目錄)信息,獲取指定目錄指定文件(目錄)信息,設(shè)置根目錄指定文件(目錄)信息,設(shè)置指定目錄指定文件(目錄)信息,在指定目錄查找指定文件(目錄),在指定目錄處增加指定文件(目錄),在指定目錄刪除指定文件(目錄),改變指定目錄指定文件(目錄)的屬性,判斷目錄是否為空,在指定目錄查看指定文件(目錄)是否存在。除了對(duì)最后兩個(gè)函數(shù)作了很小的改動(dòng)外,其他函數(shù)都沒(méi)用動(dòng)。