启动签名 - BIOS

Jor*_*vis 5 bios boot storage bootloader bootsector

我知道 BIOS 在 ROM 中,制造商“通常”将其设计为指向“活动”存储设备的第一个扇区的第一个扇区或 CHS (0,0,1)*physical 和 CHS (0,0, 0)*logical 根据您对分区的偏好,可以是 MBR 或 VBR。


维基百科:

引导扇区中存在用于 x86-CPU 的 IBM PC 兼容引导加载程序按照惯例由引导扇区末尾的两字节十六进制序列 0x55 0xAA(称为引导扇区签名)表示(偏移量 0x1FE 和 0x1FF) . 该签名表明至少存在一个可以安全执行的虚拟引导加​​载程序,即使它可能无法实际加载操作系统。

引导签名标识的引导加载程序使用两个字节十六进制序列,所以我猜签名必须是在同一扇区偏移?因此,假设引导加载程序必须在同一个扇区中?

8bi*_*ree 8

当 BIOS 试图找到要引导的东西时发生的基本操作顺序是:

  1. 将您尝试从(HDD、SSD、软盘、光盘等)启动的设备的第一个扇区(512 字节)加载到内存中
  2. 检查第 511 个和第 512 个字节是否分别为 0x55 和 0xAA。
    • 如果没有,请返回步骤 1 并尝试下一个设备,如果没有更多设备,则放弃。
    • 如果是,则在该扇区的开头开始执行代码,从而将控制权传递给(希望)引导加载程序/管理器。

您可能会发现引导序列上OSDev wiki 页面很有用。在MBR页面也有一个有用的表解释说,第一个扇区的布局。我在这里重新创建了一些简化:

Offset | Size (bytes) | Description
    0  | 436          | MBR Bootstrap (flat binary executable code) 
0x1b4  |  10          | Optional "unique" disk ID
0x1be  |  64          | MBR Partition Table, with 4 entries
0x1fe  |   2          | (0x55, 0xAA) "Valid bootsector" signature bytes
Run Code Online (Sandbox Code Playgroud)

请注意,BIOS 不一定要注意甚至知道磁盘 ID 或分区表。

在此处输入图片说明