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