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

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

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

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