1. 前言
近幾年來,嵌入式操作系統得到飛速的發展,從支持8位微處理器到16位、32位甚至64位,從支持單一的微處理器芯片到支持多品種微處理器芯片,從只有實時內核到除了內核外還提供其它功能模塊如:高速文件系統、TCP/IP網絡系統、GUI系統等。嵌入式操作系統的文件系統是指嵌入式操作系統中文件的組織與管理結構,它是嵌入式操作系統的核心。從外部看來,文件系統是一組文件和目錄的操作。文件可以被讀寫,目錄可以被創建和刪除。而在內部看,文件系統卻迥然不同。文件系統的設計者,必須考慮到存儲區如何分配以及系統如何記錄文件、使用了哪些塊等。文件系統的可靠性和性能也是一個重要問題。文件系統是操作系統的核心,不同的操作系統其文件系統也不盡相同,這主要體現在文件存儲空間的動態分配機制上,各種文件系統各有自己的特點。本文將介紹基于嵌入式實時操作系統?COS-II的嵌入式應用實例中的文件系統的設計及實現方法。
2.文件系統簡介
目前嵌入式操作系統分商用和免費兩種。在國內市場占有率第一的商用操作系統是VxWorks,免費的操作系統包括?COS-II ,QNX和linux。由于商用操作系統價格昂貴,所以很多的研究機構使用免費操作系統。本嵌入式系統的操作系統采用的是對研究機構免費使用的?COS-II。μC/OS-II是Jean Labrosse編寫的一個免費的、源碼公開的嵌入式實時內核。對于開發計算機嵌入式應用產品來說是一個實用價值很高的實時嵌入式操作系統ERTOS。
FAT(File allocation table)文件分配表,是一個應用了幾十年的商業化軟件產品,其MS-DOS 文件系統技術成熟、結構簡單、系統資源開銷小,易于在嵌入式系統的硬件平臺上實現。它不用于表示引導區、文件目錄表的信息,也不真正存儲文件內容,只反映磁盤空間當前的使用情況,是這個文件系統的核心。文件在磁盤的分布情況是以簇鏈的方式記錄在FAT中。每個文件都有自己的存儲簇,可以是連續的也可以是不連續的,通過FAT表來實現其完整性。
JFFS2是為在嵌入式系統中使用flash存儲設備而專門設計的一種日志文件系統,作為一種日志結構的文件系統,它的文件由一長串節點組成,每個節點包含文件的部分信息。垃圾收集技術是JFFS2的重要部分,其原理是當需要增添新內容時,就在節點鏈表的末端添加新的節點、存儲新的內容;若要修改文件的某部分,JFFS2將該部分標記為廢棄,并在節點鏈表末端添加修改后的內容。JFFS2如此不斷地在flash上添加新的內容,當flash上的存儲空間用完時,系統就回收標記為廢棄的空間,該過程就稱為垃圾收集。
3. Flash的特性
Flash具有高密度和良好的存取速度等優點,是嵌入式領域應用最為廣泛的存儲設備。 它在讀取方面與普通的SRAM 存儲器類似,一般可以實現完全隨機的讀取,最大的不同在于寫操作方面。Flash存儲器的寫操作需要經過“擦除— 寫入”兩個操作過程。本系統使用的flash是sst39VF160型,如果希望對某一個單元進行寫入時,首先必須對這個存儲單元所在的扇區(Sector)或塊(Block)執行擦除操作,擦除操作成功完成后,整個扇區或塊的數據內容都被清空。一般被設置成0XFF;然后對目的單元所在的扇區或塊執行寫入操作,這就意味著修改數據比單獨的寫和讀操作需要更多的時間。為了提高flash利用率,減少碎片,本系統定義了簇,它是寫操作的最小單位,并規定每簇占256type。Sst39VF160的大小是1M×16bit,分32個塊(Block,32kword),分512個扇區(Sector,2kword),包含8192個簇。
Sst39VF160提供了Sector-Erase,Block-Erase和Chip-Erase三種擦除方式,Chip-Erase是把整個Flash擦除,內容設置為1;Block-Erase和Sector-Erase分別以塊和扇區為單位刪除flash,而且flash的擦除次數是有限的。當一個塊或扇區提前達到擦除次數的上限時將導致整個flash無法使用。通常上限為每個塊可擦除100000次。為了避免任意一個塊在其它塊之前達到這個極限,文件系統必須保證擦除次數在各擦除塊之間盡可能均勻分布,這一過程稱為“均衡磨損 (Wear Leveling) 。 ”
4.觸摸屏的簡介:
觸摸屏工業圖形顯示器,簡稱觸摸屏,它是一種連接人和設備(主要是PLC)的人機界面(Human and Machine Interface/Man and Machine Interface ,簡稱HMI/MMI)。它是用來替代傳統的控制面板和鍵盤的智能化操作顯示器,是工業場合常用的操作臺,一般用來連接PLC、變頻器等設備。
圖1 觸摸屏系統
主要的功能包括:
·設備監視功能 以數據曲線、圖形或動畫的形式來反映設備的內部狀態;
·設備控制功能 通過觸摸操作來改變設備(如PLC的寄存器)的內部寄存器,從而參與控制過程;
· 數據記錄功能 通過標準的大容量CF卡存儲配方數據,實時采樣的數據和歷史報警信息。
通常,在上位機(pc)用組態軟件(HMI/MMI)設計控制系統,然后將系統(包括系統文件、畫面文件、通訊協議等)下載到觸摸屏,此時PC和觸摸屏是上位機和下位機的關系。觸摸屏運行時實時與PLC 通訊,根據情況讀寫PLC寄存器,并把寄存器值的變化在顯示器內部以圖形、畫面、曲線等形式表現出來,此時觸摸屏和PLC是主機和從機的關系。
5.文件系統
本論文嵌入式系統使用的CPU是三星的ARM7系列的S3C44B0,存儲器采用的是sst39VF160型flash,操作系統選用的是實時操作系統?COS-II。該文件系統在基本結構上與MS-DOS的FAT文件系統類似。本flash文件系統的基本結構如表1所示:
Flash的空間分配如表2:

Flash前面的32k存放bootloader程序,bootloader程序是在操作系統內核運行之前運行的一段小程序。通過這段小程序,可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境。
簇表記錄了除文件首簇以外文件使用的所有簇的情況(文件的首簇使用情況記錄在文件分配表中),簇表的序號與文件所使用的簇號有一一對應的關系。圖2給出了本文件系統中簇表和文件分配的關系,配合這個例子,可以清楚的了解簇表在文件系統中的作用及文件系統是如何利用簇表來完成工作的。例子中文件的起始簇號為4,占用4個簇的空間(第4簇到第7簇)。

圖2 簇表和文件分配的關系
根據簇表可以知道某簇的使用情況,是使用還是未使用。在進行文件操作時,根據文件分配表中找到文件的起始簇,然后在簇表中查出鏈接簇號。簇表內容見表3。

系統信息表:存放媒質信息和最重要的文件系統信息。媒質信息諸如flash存儲器的類型、容量,劃分成多少個區塊,每區塊包含多少個扇區等。文件系統信息包括版本信息、保留區塊的數目和位置、文件分配表和文件登記表所在的位置和大小、數據區域的位置和大小等。
簇表:本flash系統定義256type為一簇,簇表存放著flash存儲器的簇的占用與空閑情況。FAT文件系統中有12 位、16 位、32位三種不同的FAT 格式。考慮到在微處理器上實現的方便及本系統使用的flash是16bit,所以將簇表固定為16位的格式。由于flash的前32k用來固定存放bootloader,簇表的前128項被閑置,現在用來存放系統信息表內容。
數據區域:用于存放文件的數據內容。本flash文件系統中,數據分配的最小單位是簇,而扇區(sector)是一個基本擦除單位。
本flash文件系統提供:文件系統的格式化,文件的打開、關閉、刪除、建立、讀、寫。針對系統的特點和需求,本文件系統未提供目錄訪問功能。
文件系統運行時,首先上位機通過Jtag口把bootloader程序燒寫flash中,然后上位機通過RS232串口將系統下載到下位機,下載過程中生成文件系統。簇表類似FAT格式,當文件系統要建立文件時,它總是首先進入簇表,然后搜索簇表尋找可用簇,盡量找連續的可用簇(其簇表項值為0),并將該簇簇號作為該文件的起始簇號寫到文件分配表中的起始簇號項中,并將數據存入該簇中。如果一個連續空簇還未存下此文件則找下一個連續空簇,這樣就形成了一個簇鏈。前一個簇對應的簇表項中總是記錄著下一個簇的簇號,而在最后一個簇表項中填入文件結束標志0xFFFF,訪問文件時,順著這條扇區鏈就可以找到全部文件的內容。
為了解決flash存在先擦除再寫的缺陷和“均衡磨損”問題。本文件系統在修改某個畫面文件并下載到下位機時,文件系統檢查到flash存在這個文件的舊數據,這個時候,遵循先寫后擦除的原則。即在簇表尋找未使用的空簇,寫入新的文件數據,同時,修改簇表,將存放原來文件對應的簇表項置0x1111(臟數據),自動修改文件分配表,將該文件的起始簇由原來的簇號改為現在的簇號。雖然不能完全達到“均衡磨損”,但在一定程度上緩解了這個問題,滿足實際的需求。當文件比較多而flash的空間緊張時,借鑒JFFFS2文件系統的垃圾集回收技術的思想,規定當空的扇區數少于6個,激活一個任務,開始回收臟空間,始終保證系統有至少6個扇區的空間使用。
6.結論
本文件系統針對flash本身先擦除再寫的缺陷和“均衡磨損”的特性,同時結合了FAT文件系統和JFFF2文件系統的特點,實現了對文件的組織與管理,保證了系統的正常運行。
本文件系統應用于觸摸屏產品當中,實際運行效果良好,同時,也可以作為其他嵌入式文件系統的參考。