標籤:style os 檔案 sp 資料 on 代碼 ad bs
嵌入式韌體的系統區(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等標準檔案系統。
SoC嵌入式軟體架構設計之七:嵌入式系統韌體的系統區檔案系統設計