2017-02-09 29 views
5

如果我想我的引導程序從U盤啓動,我要包括BPB。 USB棒以軟盤模擬模式運行。如看到here,有許多不同的BPB版本。 bios如何知道什麼類型的BPB存在? GRUB 0.97似乎還在使用另一種BPB格式?bios如何知道BPB是什麼類型?

我可以墊從0XB一點偏移我的引導程序,然後它也可以工作。 是否有標準/通用尺寸可供使用?我沒有在我的USB上使用任何文件系統,只是生。

我想我需要的BPB因爲BIOS嘗試更新一些的值,覆蓋一些代碼。由於每個BPB看起來有點不同,bios怎麼知道在哪裏更新什麼值?

回答

2

不是所有的BIOS實現不在乎,如果你有一個BPB。對BPB與MBR引導扇區開頭的一般格式如下:

bits 16 
org 0     ; BIOS will load the MBR to this location. 

    bootStart: 
      jmp  _start 
      nop 
      osType  db 'MSDOS6.0' 
      bpb 
      bps   dw 512 
      spc   db 8 
      rs   dw 1 
      fats  db 2 
      re   dw 512 
      ss   dw 0 
      media  db 0xf8 
      spfat  dw 0xc900 
      spt   dw 0x3f00 
      heads  dw 0x1000 
      hidden  dw 0x3f00, 0 
      ls   dw 0x5142,0x0600 
      pdn   db 0x80 
      cheads   db 0 
      sig   db 0x29 
      serialno dw 0xce13, 0x4630 
      label  db 'NO NAME' 
      fattype  db "FAT32" 

    _start: 
           ; set up the registers 
      mov  ax, 0x07c0 
      mov  ds, ax 
      mov  fs, ax 
      mov  gs, ax 
      mov  ax, 0x0700 
      mov  es, ax 

的領域總是在同一個地方。該方式系統,如果它關心BPB,驗證它是隻需解析它。

+0

[GRUB](https://github.com/jezze/grub-legacy/blob/master/stage1/stage1.S)65至85行使用不同的順序不是嗎?其中的值也設置爲零,是不是可以只用零填充bpb空間? – user237948

+1

那麼,理論上會是這樣,但我不得不說拒絕啓動一個非常有效的MBR,除非一些,這是合理的,特別是向上穿過頭系統。 –

+3

@ user237948:您可以用零填充空格(您需要啓動JMP才能啓動)。在GRUB代碼中,他們使用BPB空間作爲自己的變量。他們不在乎什麼BIOS可能放在那裏,他們最終反正覆蓋數據(如果使用它們檢索從BIOS本身的驅動器幾何軟盤)。一是理由把健全的價值觀在那裏,表示驅動器是在事件表明您正在使用磁盤映像,您實際上可以使用裝入軟件來讀取標題並從BPB條目中確定磁盤映像配置。 –

相關問題