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等標準文件系統。下一節再繼續講解固件分佈設計。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章