2015年7月5日

IA32 boot code



這裡,有一段IA32的boot code,用於FAT32的檔案系統格式。可以使用NASM assembler,組譯成binary code,寫入USB Flash Disk的開機磁區。
組譯的方式:
1. 打開cmd.exe
2. 執行 nasm -f bin -o bootload.bin bootload.asm
3. 最後會產生bootload.bin檔

寫入USB Flash Disk的方式:
1. 執行BootWriter.exe
2. 在Write to USB Flash Disk功能區中,點選Write按鈕
3. 選擇bootload.bin所在的位置後,即會將bootload.bin寫入開機磁區

這個boot code主要的工作有兩個,一是在FAT32檔案系統中找出embedded.bin檔案所在的位置,二是將embedded.bin載入至記憶體位址為0000:0000的位置,然後從記憶體位址0000:0000的地方開始執行指令。

這段boot code在設計時, 為了簡化程式碼(只能在512bytes以內),有幾個條件限制
1. 只搜尋16筆目錄區中的資料
2. FAT資料區只比對128個index(每個index為4bytes)
3. 有三個數值由BootWriter.exe計算後填入,這三個數值分別為firstDataSec、paraPerClust及            bytesPerClust

另外,要注意以下幾點:
1. BS_OEMName 要填入"MSWIN4.1",否則BIOS會認不得boot sector。至於是認不得,或者是     說不會執行boot code,詳細的細節我並不清楚,我遇到的情況是,在我的筆電(Compaq             Presario V3000)上測試,如果沒有填入"MSWIN4.1",USB Flash Disk就無法開機。
2. USB Flash Disk 的讀取是利用BIOS int 13 function 02的方式,而實際上logical sector 0(所謂       的boot sector)並不等於physical sector 1,必須要加上BPB_HiddSec(隱藏磁區),才是真正對       應到的physical sector
3. 最後,在BIOS的開機設定裡,要將USB DISK enable


沒有留言:

張貼留言