讀寫U盤 FAT32 引導扇區

2021-06-20 23:45:29 字數 2083 閱讀 2767

看了《自己動手寫作業系統》後,也想自己打造乙個迷你作業系統,但是書中使用的軟盤現在基本已經絕跡了,而u盤成為一種喜聞樂見的工具。因此想將作業系統寫入u盤中,而讀寫u盤的引導扇區成為成功的關鍵。

將u盤格式化為fat32檔案系統,要讀寫u盤的引導扇區,需要首先了解fat32的格式。它包含四個部分:

保留扇區 | fat1 | fat2 | 資料區。需要注意的是:保留扇區的第乙個扇區是引導扇區(dbr)。

其中引導扇區的資料結構為:

資料區的開始為主目錄區,主目錄區包含了檔案的熟悉,資料結構如下:

根據每個檔案起始的簇號,就可以找到檔案內容的絕對扇區起始位置

檔案的簇號在fat表中安裝鍊錶的形式存放,檔案的屬性在主目錄區安裝陣列的形式存放。

檔案內容的絕對扇區起始位置 = 保留扇區 + fat1 + fat2 + (起始簇號 -2)*每簇的扇區數

然後編寫引導程式,讀入u盤引導扇區,選擇從u盤啟動,就可以看到自己打造的u盤作業系統了

引導程式的彙編**如下:

[c-sharp]view plain

copy

org 07c00h  

jmp short label_start  

nop  

oem                   db  'dirichet'            ;//8bytes

bytes_per_sector      dw   512  

sectors_per_cluster   db   8  

reserved_sectors      dw   584  

number_of_fats        db   2  

root_entries          dw   0  

sectors_small         dw   0  

media_descriptor      db   0f8h  

sectors_per_fat_small dw   0  

sectors_per_track     dw   63  

heads                 dw   255  

hidden_sectors        dd   63  

sectors               dd   3902913  

sectors_per_fat       dd   3804  

extended_flags        dw   0  

version               dw   0  

root_dir_1st_cluster  dd   2  

fsinfo_sector         dw   1  

backup_boot_sector    dw   6  

times 12 db 0  

bios_drive            db   80h  

db 0  

ext_boot_signature    db   29h  

volume_serial_number  dd   15329558  

volume_label          db   'dirichlet09'       ;//11個位元組

file_system           db   'fat32   '          ;//8個位元組           

label_start:  

mov  ax,cs  

mov  ds,ax   

mov  es,ax  

call dispstr  

jmp  $  

dispstr:  

mov ax,bootmessage  

mov bp,ax  

mov cx,15  

mov ax,01301h  

mov bx,000ch  

mov dl,0  

int 10h  

bootmessage:  db  'hello, kitty!', 13, 10, '$'

times 510-($-$$) db 0  

dw 0xaa55   

linux下FAT32格式u盤唯讀的問題及解決方法

以下是網上看到的解決辦法 plain view plain copy 其實是掉電保護,之前掛在的sd變成了制度檔案,只需要將sd卡重新掛載一遍就ok了.fat filesystem panic dev mmcblk0p4 fat free clusters deleting fat entry be...

Other U盤FAT32轉NTFS且無資料丟失

序 做了乙個u盤啟動盤後發現檔案系統格式為fat32。這種格式支援單個檔案最大4g,超過4g就無法拷貝了。為了防止以後突發情況所以提前把fat32轉換成ntfs。為避免匯入匯出資料最簡單的方法利用dos命令轉換。速度快且原始檔不丟失。步驟 開始 執行 cmd 以管理員身份執行cmd 輸入 conve...

FAT32的協議總結

讀了fat32協議等,做了一些工作,學會不少東西,但是也有很多不懂得地方,希望明白人多來指教。在u盤進行fat32格式化後,發現除了mbr,dbr,data資料區外,還有一些資料區。就是用winhex發現的,有些資料段都沒見過,不知道是幹什麼的。就是那兩個unpartitioned space。fa...