sd卡與FAT32文件系統


先把sd卡格式化,然后新建幾個文件放在里面,用於分析,sd卡中文件的存儲方式。

使用工具winhex,打開磁盤sd卡。

先分析一下sd卡的第一個扇區,其中的內容為DBR(DOS BOOT RECORD c操作系統引導記錄區)

DBR中BPB部分才是這一區域的核心部分,對於FAT32的實現意義很大。

每個紅線部分是一個字段,要知道是什么意思,對照表看看就可以啦:

上面的長度是只占的字節數,現在就對照分析一下,

每個扇區字節數是00 02,屬於小端存數,讀得時候為0x02 00,也就是512字節。

沒簇的扇區數是0x08,就是包含8個扇區,大小為4kB。

保留扇區數目為26 00,就是0x0026,保留38個扇區,你會看到fat表放在第38個扇區,前面的空間就只包含了DBR,沒有跟文件有關的東西,都是與sd卡本身有關的信息。

fat表數,為02,就是2個,這是fat32文件系統的特色,2個中有一個是備份的。

磁道扇區數為3f 00 就是0x003f,63,一個磁道所含的扇區數為63

磁頭數ff 00 就是0x00ff,255

sd卡所含的總扇區數為 00 a0 3a 00 就是0x003aa000 共有3842048個扇區

fat表扇區數為a1 0e 00 00,就是0x0ea1,3745個扇區

跟目錄簇號為02 00 00 00,就是2號,其實就是實際存儲位置是fat表后面的第一個簇,8個扇區。用於存儲根目錄。

下面還有一個信息不是很重要。

下面分析fat表:

fat表示從第38個扇區開始,然后占空間3745個扇區。為什么占這么大呢,首先fat表中每4個字節描述一個簇,一個簇中有8個扇區,sd卡可用扇區數是3834520。

(3834520/8)*4/512=3744.6484375,約為3745個扇區。可用扇區數是可以查啊。winhex中的詳述技術報告:

接下來看看fat表中的內容吧:

fat表是用來表示一個文件占了多大空間的,都是以簇為單位。哪怕你的文件只有一個字節,也是占一個簇,4kB的空間。或許你會覺得很浪費,不過想想,分得越細,越難查找,所以需要折中。我在sd卡中新建一個文件夾是SEUIC,SEUIC中新建VIM.txt(大小是10.02kB,占空間12KB,就是3個簇),根目錄下還有一個文件TEST.txt(大小17個字節,占4KB)。那么fat表怎么表示的呢?

前8個字節表示這里是fat表的開始。后面的紅線表示,每出現FF FF FF 0F都表示一個文件的結束,每四個字節為一個簇項,用以標記次簇的下一個簇號。依次解釋下,首先sd卡中存儲的是跟目錄區,占一個簇,簇號是2。后面是一個文件夾目錄文件(SEUIC),占一個簇,簇號3。后面是文件VIM.txt,占3個簇,這里就好玩了,第一個簇號是4,你看到的05,就是標記的下一個簇號,表示這兩個簇共同記錄了同一個文件,所以把他們鏈接起來。直至第6簇結束,表示文件共占3個簇。最后又是一個只占一個簇的文件(TEST.txt)。其實這里是看不出文件名的。這里只會記錄文件在sd卡中的存儲。然后在目錄區中描述一個文件的時候,只要記錄首簇號就可以了,很方便是不是。當你在一個文件中添加內容的時候,隨便寫在哪個簇,並不需要連續的,然后把簇號添加進上一個簇項里面,就完成任務了。

下面介紹目錄區:

先計算目錄區所在扇區,由fat表所在第一個扇區38,加上2個fat表所占扇區數就是3745*2(別忘了又一個備份的fat表)。結果是7528,winhex在詳細技術報告中也說明這個扇區是第一個數據扇區。

要看懂每個字段的意思,還是要查表的:

一個目錄項占32個字節,就是2行嘍。可以看出SEUIC的屬性是子目錄,起始簇號是3,這里把目錄當做文件管理,但是這樣的文件大小是0;

對於SEUIC子目錄下的文件這里是看不到的哦。TEST.txt文件屬性是歸檔,就是文件,起始簇號是7,字節數為17.

那么再去找VIM.txt,首先定位SEUIC所在扇區,他的簇號是3,就是目錄區所在扇區加8為7536。所以要找一個文件,是一層一層剝開來得。

好吧,現在去7536扇區看看:

可以看出,VIM.txt屬性是歸檔,首簇號是4,大小為0x28da,10458字節。你可以右擊文件屬性看一下,肯定是對應的啊。

那么要看VIM中的內容直接去第4簇。我們去看一下TEST.txt文件吧,這個文件比較小,在第7簇,就是7538+4*8=7568.

內容就是this is a test!!!好吧就這么多了。

在linux文件系統中,所要建立的文件索引節點所需的數據就是來自上面的32字節的數據,他記錄了文件的名字,屬性,大小,地址等信息。

還有就是,文件是一層一層向下找得,那么系統啟動掛載sd卡的時候只需要把跟目錄區拷貝到內存中就可以了。那么查找的時候,打開一個子目錄,就可以找到這個目錄下的文件信息了。所以把目錄當做文件看待是很有好處的。因為文件本身在哪兒並不重要。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM