基于System ACE的DSP文件系統設計
1.5 System ACE的文件和目錄
.ACE是在目錄結構的最底層。Xilinx的SystemACE軟件能夠將比特流轉換為.ACE文件。1個.ACE文件代表特定設備鏈的比特流。
.collection是目錄結構中緊挨著.ACE的上一層,由8個.ACE組成。在System ACE環境下,同一.collection下的所有.ACE文件都可以處理。
在1個CF卡設備中有多個collection,但在任意一時問只能有1個被激活,至于哪一個被操作是通過xilinx.sys文件來決定的。xilinx.sys文件在ACE Flash設備的根目錄下。ACE控制器能夠解析xilinx.sys文件。若根目錄下面沒有xilinx.sys文件,則必須有1個.ACE文件來充當此角色。
System ACE目錄結構的分層設計使得它能夠維護多個版本或者是不同設計的collection。每一個collection目錄可以有1個或者多個不同的子目錄。每一個子目錄只能包含1個.ACE文件。
Sysrem ACE目錄結構的規則如下:
◆Sysrem ACE配置文件必須放在CF卡設備的第1分區。
◆Sysrem ACE分區必須被格式化為FAT12或者FAT16格式。
◆xilinx.sys必須在根目錄下。當xilinx.sys不存在時,根目錄下必須有1個.ACE來充當此角色。
2 CF卡原理
CF(Compact Flash)卡是以閃存為存儲,具有容量大(512 MB)、功耗低和可靠性高等優點,得到廣泛的應用。CF卡讀寫的最小單位為1個扇區(512字節),讀寫操作是通過卡內緩沖區進行的,不支持直接讀寫存儲區域。
CF卡可以工作在3種模式:PC Card Memory(Memory模式),PC Card I/O(I/O模式)和True IDE模式。PCCARD模式與PCMCIA標準兼容。TRUE IDE模式與ATA/ATAPI-4標準兼容。當上電時,如果OE接地,則進入True IDE模式,在此模式下只可以存取任務寄存器。另外2種模式需要通過設備結構寄存器來選擇。
CF卡的操作方式與硬盤的操作方式相似。CF卡讀寫必須以扇區為單位,每個扇區為512字節,每次可以讀寫1個扇區或連續多個扇區。扇區的尋址方式有2種:邏輯尋址(LBA)和物理尋址(CHS),它們之間的關系為:
LBA=(柱面號×磁頭數+磁頭號)×扇區數+扇區數-1
尋址方式采用LBA(Logic Block Address),該方式將全部扇區映射至1塊連續的地址空間中,這樣可以大大簡化編程的工作,同時避免了柱面、磁頭和扇區之間的換算,使尋址更方便。對CF卡的配置及各種操作,如讀寫、刪除、格式化等,都通過寫特殊功能寄存器完成。
3 文件系統的建立
3.1 文件系統的引入
100個數在文件系統中是如何存放的呢?在計算機中是以0/1二進制的形式簡單地存放在存儲介質中。如果不同的數多,如何處理?這就引出了文件系統。文件系統實際上就是對存儲的數據進行管理。本文在CF卡上建立的文件系統是FAT16。FAT16是Microsoft較早推出的文件系統,具有高度兼容性,目前仍然廣泛應用于個人電腦尤其是移動存儲設備中。
硬盤上的數據按照其不同的特點和作用大致可分為5部分:MBR(Main Boot Record,主引導扇)區,DBR(DosBoot Record,操作系統引導記錄)區,FAT(File AllocationTable,文件分配表)區,DIR(Directory,根目錄)區,DATA區。
MBR區位于整個硬盤的0柱面0磁頭1扇區(可以看作是硬盤的第1個扇區),bios在執行自己固有的程序以后就會跳轉到mbr中的第1條指令,將系統的控制權交由mbr來執行。在總共512字節的主引導記錄中,MBR的引導程序占了其中的前446字節(偏移0H~偏移1BDH),隨后的64字節(偏移1BEH~偏移1FDH)為DPT(Disk Partition Table,硬盤分區表),最后的2字節“55 AA”(偏移1FEH~偏移1FFH)是分區有效結束標志。MBR不隨操作系統的不同而不同,即不同的操作系統可能會存在相同的MBR,即使不同,MBR也不會夾帶操作系統的性質,具有公共引導的特性。
DBR(Dos Boot Record,操作系統引導記錄)區通常占用分區的第0扇區,共512字節(特殊情況下也要占用其他保留扇區,這里先說第0扇)。在這512字節中,其實又是由跳轉指令、廠商標志和操作系統版本號、BPB(BIOS Parameter Block)、擴展BPB、os引導程序、結束標志幾部分組成。
FAT表是用FAT16來記錄磁盤數據區簇鏈結構的。如前面的例子,FAT將磁盤空間按一定數目的扇區為單位進行劃分,這樣的單位稱為簇。通常情況下,每扇區512字節的原則是不變的。簇的大小一般是2n(n為整數)個扇區的大小,像512 B、1 KB、2 KB、4 KB、8 KB、16 KB、32 KB、64 KB。實際中通常不超過32 KB。之所以簇為單位而不以扇區為單位進行磁盤的分配,是因為當分區容量較大時,采用大小為512位的扇區管理會增加FAT表的項數,對大文件存取增加消耗,文件系統效率不高。
DIR(Directory)是根目錄區,緊接著第二FAT表(即備份的FAT表)之后,記錄著根目錄下每個文件(目錄)的起始單元、文件的屬性等。定位文件位置時,操作系統根據DIR中的起始單元,結合FAT表就可以知道文件在硬盤中的具體位置和大小了。
數據區是真正意義上的數據存儲的地方,位于DIR區之后,占據硬盤上的大部分數據空間。
3.2 FAT16文件系統存儲原理
在FAT文件系統中,文件的存儲依照FAT表制定的簇鏈式數據結構來進行。同時,FAT文件系統將組織數據時使用的目錄也抽象為文件,以簡化對數據的管理。格式化FAT16分區時,格式化程序根據分區的大小確定簇的大小,然后根據保留扇區的數目、根目錄的扇區數目、數據區可分的簇數與FAT表本身所占空間來確定FAT表所需的扇區數目,之后將計算結果寫入DBR的相關位置。FAT16 DBR參數的偏移0x11處記錄了根目錄所占扇區的數目。偏移0x16記錄了FAT表所占扇區的數據。偏移0x10記錄了FAT表的副本數目。系統在得到這幾項參數以后,就可以確定數據區的開始扇區偏移了。FAT16文件系統從根目錄所占的32個扇區之后的第1個扇區開始以簇為單位進行數據的處理,這之前仍以扇區為單位。對于根目錄之后的第1個簇,系統并不編號為第0簇或第1簇,而是編號為第2簇,也就是說數據區順序上的第1個簇也是編號上的第2簇。FAT文件系統之所以有12、16、32不同的版本之分,其根本在于FAT表用來記錄任意一簇鏈接的二進制位數。以FAT16為例,每一簇在FAT表中占據2字節(二進制16位)。所以,FAT16最大可以表示的簇號為0xFFFF(十進制的65535),以32 KB為簇的大小的話,FAT32可以管理的最大磁盤空間為:32 KB×65 535=2 048 MB,這就是為什么FAT16不支持超過2 GB分區的原因。FAT表實際上是1個數據表,以2字節為單位,我們暫將這個單位稱為FAT記錄項,通常情況其第1、2個記錄項(前4個字節)用作介質描述。從第3個記錄項開始記錄除根目錄外的其他文件及文件夾的簇鏈情況。
評論