天天看點

SoC嵌入式軟體架構設計之七:嵌入式檔案系統設計

    嵌入式的系統區(system disk,SD)包含作業系統、驅動、中間件、應用和字庫、UI資源等檔案,本文講述SD區的檔案系統設計。檔案系統最基本的目标是為了實作單個檔案的定位和讀寫。由于一般代碼都是不可自改動的。即量産之後不會有寫操作。嵌入式系統的SD檔案系統就是為了可以簡單、高效地定位某個檔案和讀取檔案裡的資料。設計原則和要點有下面幾方面:

       1. 邏輯連續存儲單個檔案,以扇區對齊。

        SD區的單個代碼和資源檔案一般都不大。是以不必要像fat32檔案系統那樣用fat表把檔案簇串起來。直接邏輯連續地存儲起來就可以,這樣定位也會更加簡單高速,當然檔案應該以扇區來對齊。友善讀取,檔案偏移資訊也能用扇區數來記錄。  

       2. SD頭

       這是對整個SD區屬性的描寫叙述,包含校驗碼、版本、日期、OEM廠商等等。有時為了保證知識産權,還會加上一些防止拷貝的加密ID資訊。

       3. DIR節

        DIR節就是檔案夾資訊,即每一個檔案在SD區中的定位資訊。是SD檔案系統最重要的資料結構。檔案的定位就是依賴于檔案夾資訊進行。打包工具會按一定的順序将各個檔案打包。并相應按順序産生每一個檔案相應的檔案夾資訊。每一個檔案的檔案夾資料結構例如以下:

        1)檔案名稱,通常是8+3格式

        2)檔案屬性。區分系統檔案和應用檔案、隐藏檔案等

        3)檔案在SD區中的偏移量,以扇區為機關

        4)檔案大小,位元組為機關

        5)校驗碼

        4. 檔案資料

        DIR節之後就是一個個真實的代碼和資源和配置等檔案。

        5. fopen

        打開檔案即依據檔案名稱在DIR節中比對,比對成功就可以獲得檔案在SD中的偏移量,将這偏移量右移9位(即512位元組。一個扇區)即是檔案的位置。fopen傳回的是一個句柄,該句柄相應一個資料結構,結構一般包含:檔案的起始位置、長度、目前讀指針位置等。

記錄起始位置和長度是為了防止越界讀取。

        6. fread

        依據句柄的目前讀指針進行讀取。讀後要改動目前讀指針。

        7. fseek

        依據模式來直接改動讀指針。

        須要清除的是:SD區是一個邏輯區,其僅僅是固件的一部分。一個固件會包含引導區、SD區、VM區、特定功能區(如VM)。之後才是資料區。這個資料區就會部署fat32或者exfat等标準檔案系統。

下一節再繼續解說固件分布設計。

本文轉自mfrbuaa部落格園部落格,原文連結:http://www.cnblogs.com/mfrbuaa/p/5392048.html,如需轉載請自行聯系原作者