摘要:文中論述在復(fù)雜嵌入式系統(tǒng)中建立文件系統(tǒng)的重要性,并提出將FAT16文件系統(tǒng)應(yīng)用于嵌入式操作系統(tǒng)ASIX OSⅡ的方案。根據(jù)FAT16文件系統(tǒng)總體的構(gòu)架、基本的數(shù)據(jù)結(jié)構(gòu),針對嵌入式系統(tǒng)的特點(diǎn)搭建能夠有效管理、讀取數(shù)據(jù)文件的系統(tǒng)。其技術(shù)成熟,應(yīng)用可靠,并且提供和ASIX OSⅡ的API接口,便于使用,易于移植。
關(guān)鍵詞:嵌入式系統(tǒng);FAT16文件系統(tǒng);ASIX OSⅡ
中圖分類號(hào):TP316文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)16-21311-02
Implementation of FAT16 File System on Embedded OS ASIX OSⅡ
JIANG Chuan, QIAN Li-li, LIU Hao
(IC College, Southeast University, Suzhou Research Institute, Nanjing 210096,China)
Abstract:This paper discuss it is important to build the file system on the complex Embedded system, and proposed that applies the FAT16 filing system in embedded operating system ASIX OSⅡ. According to the FAT16 filing system overall's skeleton, the basic construction of data, in view of embedded system's characteristic can build the file system that manage effective. Its technology is mature, the application is reliable, and provides with API of ASIX OSⅡ, is advantageous for the use, easy to transplant.
Key words:Embedded System;FAT16 File System;ASIX OSⅡ
近年來,嵌入式系統(tǒng)發(fā)展迅猛的同時(shí),對于數(shù)據(jù)操作的靈活性提出了越來越高的要求。以往那種直接針對存儲(chǔ)介質(zhì)讀寫數(shù)據(jù)的方式顯然是不能夠滿足這種靈活的需求,因此,如何在嵌入式操作系統(tǒng)中使用文件系統(tǒng)管理數(shù)據(jù)文件成為嵌入式系統(tǒng)開發(fā)無法回避的問題。
ASIX OS II是國家專用集成電路系統(tǒng)工程技術(shù)研究中心自主設(shè)計(jì)的嵌入式實(shí)時(shí)操作系統(tǒng),能為嵌入式應(yīng)用提供多種系統(tǒng)資源管理功能。ASIX OS II文件系統(tǒng)提供與底層物理存儲(chǔ)介質(zhì)無關(guān)的、清晰明了的API函數(shù),使上層不用關(guān)心底層的存儲(chǔ)介質(zhì),而方便的利用標(biāo)準(zhǔn)接口訪問底層存儲(chǔ)器。接口的標(biāo)準(zhǔn)化,使程序的層次分明,增加程序的可移植性。因此,在嵌入式系統(tǒng)中加載文件系統(tǒng)是嵌入式系統(tǒng)發(fā)展的必然接口。
1 ASIX OS II文件系統(tǒng)概述
本系統(tǒng)使用FLASH為存儲(chǔ)介質(zhì),使用專用的嵌入式文件系統(tǒng)——ASIX OS II文件系統(tǒng)。ASIX OS文件系統(tǒng)是一個(gè)與MS-DOS、Windows 95、Windows98和Windows NT兼容的VFAT文件系統(tǒng)。該文件系統(tǒng)的實(shí)現(xiàn)代碼是用ANSI C 編寫的,它支持FAT12,F(xiàn)AT16 和FAT32文件系統(tǒng)格式和長的文件名一直到255個(gè)字符,它是ASIX PLUS實(shí)時(shí)核的一個(gè)文件系統(tǒng)的擴(kuò)充。因?yàn)锳SIXOS文件系統(tǒng)與Microsoft的文件系統(tǒng)高度的皆容,這使得在此基礎(chǔ)上設(shè)計(jì)的嵌入式FTP系統(tǒng)能夠存取INTERNET上豐富的文件資源。
如圖1所示,本系統(tǒng)通過層次結(jié)構(gòu)實(shí)現(xiàn)對文件的操作。應(yīng)用程序使用標(biāo)準(zhǔn)函數(shù)庫中1/0函數(shù)對文件結(jié)構(gòu)進(jìn)行操作。該系統(tǒng)通過存儲(chǔ)設(shè)備的驅(qū)動(dòng)程序?qū)崿F(xiàn)對物理設(shè)備(FLASH)的控制。驅(qū)動(dòng)層向上將設(shè)備抽象成邏輯設(shè)備(邏輯頁面和塊),為文件系統(tǒng)提供對物理設(shè)備操作的接口。向下實(shí)現(xiàn)對物理閃存設(shè)備的讀寫、清零、ECC檢驗(yàn)等工作。
2 ASIX OS II文件系統(tǒng)的實(shí)現(xiàn)
ASIX OS II 文件系統(tǒng)使用FAT16格式,這是一種成熟、結(jié)構(gòu)簡單,系統(tǒng)資源開銷小,易于在嵌入式系統(tǒng)的硬件平臺(tái)還是那個(gè)實(shí)現(xiàn)的文件系統(tǒng)。
FAT16文件系統(tǒng)管理的設(shè)備由4部分組成:①保留區(qū)域(Reserved Region);②FAT表區(qū)(FAT Region);③根目錄區(qū)(Root Directory Region);④文件、目錄數(shù)據(jù)區(qū)(File and Directory Data Region)。如圖2所示。
相對應(yīng)前三個(gè)部分,F(xiàn)AT16文件系統(tǒng)中定義了三個(gè)非常重要的數(shù)據(jù)結(jié)構(gòu),它們是:①BPB數(shù)據(jù)結(jié)構(gòu);②FAT數(shù)據(jù)結(jié)構(gòu);③目錄項(xiàng)。
圖1 對FLASH的操作過程圖2 FAT文件系統(tǒng)結(jié)構(gòu)圖
BPB(BIOS Parameter Block)數(shù)據(jù)結(jié)構(gòu)位于文件分區(qū)保留區(qū)的第一扇區(qū),這個(gè)扇區(qū)被稱為“引導(dǎo)扇區(qū)”或“保留扇區(qū)”或“零扇區(qū)”,它由高級(jí)格式化程序產(chǎn)生。BPB顧名思義就是“基本輸入輸出參數(shù)塊”,這個(gè)數(shù)據(jù)結(jié)構(gòu)中包含了對文件分區(qū)描述的基本信息,包括:每扇區(qū)的字節(jié)數(shù)、每簇的扇區(qū)數(shù)、FAT表數(shù)目、“目錄項(xiàng)”數(shù)、文件分區(qū)中的扇區(qū)數(shù)、每個(gè)FAT表占用的扇區(qū)數(shù)。
圖3 FAT表結(jié)構(gòu)圖
FAT(File Allocation Table)數(shù)據(jù)結(jié)構(gòu)位于文件分區(qū)FAT表區(qū),F(xiàn)AT表區(qū)緊跟保留區(qū)域之后,出于數(shù)據(jù)安全考慮,F(xiàn)AT表區(qū)一般有兩個(gè)FAT表,第二個(gè)FAT表是第一個(gè)FAT表的簡單備份。FAT數(shù)據(jù)結(jié)構(gòu)充分體現(xiàn)了FAT文件系統(tǒng)的文件索引機(jī)制,F(xiàn)AT16文件系統(tǒng)FAT表的部分內(nèi)容如圖3所示。
圖2中第1行表示FAT表的表項(xiàng),第2行表示的是對應(yīng)文件簇的分配情況;0000表示未分配簇;0002-FFEF表示已分配簇;FFF0-FFF6為系統(tǒng)保留;FFF7表示壞簇,不可讀寫;FFF8-FFFF表示文件結(jié)束簇。
它的核心思想如下:FAT文件系統(tǒng)為每個(gè)文件建立一個(gè)“索引鏈”,“鏈”上的每個(gè)元素是文件數(shù)據(jù)在數(shù)據(jù)區(qū)中所占“簇”的“簇號(hào)”。通過某個(gè)文件的目錄項(xiàng),該文件在數(shù)據(jù)區(qū)中的起始簇號(hào)可以很容易得到,由此可以在數(shù)據(jù)區(qū)的這個(gè)簇讀取到相應(yīng)的數(shù)據(jù)。然后再查找到FAT表的這個(gè)簇號(hào)單元,如果內(nèi)容是文件結(jié)束標(biāo)志(FFFF),則表示該文件結(jié)束,否則該單元的內(nèi)容指的是該文件保存數(shù)據(jù)的下一簇的簇號(hào),這樣重復(fù)索引直到找到文件結(jié)束。流程如圖4所示。
目錄項(xiàng)是非常重要的一個(gè)數(shù)據(jù)結(jié)構(gòu),因?yàn)橹挥蠪AT表還不能定位文件在存儲(chǔ)介質(zhì)中的位置。無論哪種形式下的目錄項(xiàng),它都記錄著每個(gè)文件的起始位置。在根目錄區(qū)之后,才是真正意義上的數(shù)據(jù)存儲(chǔ)區(qū),即DATA區(qū)。
DATA雖然占據(jù)了絕大部分存儲(chǔ)空間,但沒有前面的部分。它對于用戶來說,也只能是一些枯燥的二進(jìn)制代碼,沒有任何意義。系統(tǒng)是沒有辦法利用其中的有效數(shù)據(jù)的。
為了有效管理引導(dǎo)扇區(qū)、FAT、目錄項(xiàng)等,為每個(gè)文件系統(tǒng)建立了一個(gè)專有的數(shù)據(jù)結(jié)構(gòu),它包括引導(dǎo)區(qū)的首地址、FAT表指針、目錄項(xiàng)表的結(jié)構(gòu)、數(shù)據(jù)區(qū)的扇區(qū)號(hào)等成員變量。通過它,可以很容易的訪問文件系統(tǒng)中的所有數(shù)據(jù)結(jié)構(gòu)和參數(shù)。
3 FAT16文件系統(tǒng)在ASIX OS II中的API接口
在ASIX OS II中使用FAT16文件系統(tǒng)是通過調(diào)用文件系統(tǒng)提供的一系列API函數(shù)實(shí)現(xiàn)的。通過調(diào)用這些函數(shù),上層應(yīng)用程序開發(fā)者可以不管底層硬件的具體操作,直接地靈活管理存儲(chǔ)設(shè)備而上的數(shù)據(jù)文件。
使用這套文件系統(tǒng),需要在相關(guān)的任務(wù)里調(diào)用相應(yīng)的API函數(shù)。
4 ASIX OS II文件系統(tǒng)的簡易移植性
在不同的應(yīng)用場合,物理存儲(chǔ)介質(zhì)是不同的。為了使文件系統(tǒng)在各種不同的存儲(chǔ)介質(zhì)上能夠方便的使用,設(shè)計(jì)者通過一個(gè)結(jié)構(gòu)體數(shù)組來解決移植性的問題。具體代碼如下:
_PC_BDEVSW pc_bdevsw[] =
{
{0, pc_rd_open, pc_rd_raw_open, pc_rd_close, pc_rd_io, pc_rd_ioctl,(int(*)(U16))0},/* A: RAMDISK*/
{1, nor_rd_open, nor_rd_raw_open, nor_rd_close, nor_rd_io, nor_rd_ioctl,(int(*)(U16))0}, /* B: NORFLASH */
{3,nand_rd_open, nand_rd_raw_open, nand_rd_close, nand_rd_io, nand_rd_ioctl, (int(*)(U16))0} /* D: nandflash*/
};
對于不同介質(zhì)的讀寫操作,用戶只要更改結(jié)構(gòu)體數(shù)組中的設(shè)備驅(qū)動(dòng)號(hào)即可。也就是說,文件系統(tǒng)移植過程中只需要根據(jù)存儲(chǔ)介質(zhì)的不同改寫相應(yīng)的底層讀寫函數(shù),不需要更改文件系統(tǒng)的任何API函數(shù),也不需要改變文件系統(tǒng)的應(yīng)用方式,這使得文件系統(tǒng)具有很簡單的移植性。
5 結(jié)束語
嵌入式文件系統(tǒng)繼承了普通文件系統(tǒng)的設(shè)計(jì)思想和實(shí)現(xiàn)方法,本文又根據(jù)ASIX OS II系統(tǒng)自身的特點(diǎn)對普通文件系統(tǒng)作了精簡和適應(yīng)性擴(kuò)展。FAT16文件系統(tǒng)在整個(gè)嵌入式系統(tǒng)中的應(yīng)用,體現(xiàn)了存儲(chǔ)數(shù)據(jù)可靠性高,與操作系統(tǒng)耦合度低等一些列的優(yōu)點(diǎn)。是一套適合與嵌入式開發(fā)的文件系統(tǒng)。
參考文獻(xiàn):
[1] 鄧劍,楊曉非,廖俊卿.FAT 文件系統(tǒng)原理及實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,2005,33(9):105-108.
[2] 羅華春.基于Flash存儲(chǔ)器的嵌入式文件管理器設(shè)計(jì)[J].交通與計(jì)算機(jī),2005,23(1):99-102.
[3] 普天信息技術(shù)研究院.關(guān)于NAND Flash存儲(chǔ)空間管理和文件管理方法的研究[J].技術(shù)報(bào)告.北京.2005.
[4] 陳育智.嵌入式系統(tǒng)中的Flash 文件系統(tǒng)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用.2002,(2):5-8.
[5] 駱麗譯.嵌入式系統(tǒng)設(shè)計(jì)[M].北京航空航天大學(xué)出版社.
[6] 陳代軍.解析FAT文件系統(tǒng)對長文件名的支持[J].成都信息工程學(xué)院學(xué)報(bào).18卷 380-385.
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。