2017-02-09 57 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条目中确定磁盘映像配置。 –

相关问题