上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.1 BOIS启动阶段
CPU在上电初始化时,特殊的硬件电路在CPU的RESET引脚产生逻辑值。产生RESET后,把指令寄存器CS:EIP初始化为固定的值,这是CPU复位后的第一条指令地址,同时执行在物理地址0xfffffff0处找到的代码,断电后内存中的内容就丢失了,因此该指令必须保存在非易失的存储器中(ROM)。ROM中存放的程序集成为BIOS。
BOIS代码首先对系统进行必要的初始化,并在以物理地址0处开始的1KB内存中建立实模式下的中断向量表,之后的一部分内存用于保存BIOS在启动阶段检测到的硬件信息。此外,BIOS会根据配置把引导设备的第一个扇区加载到物理地址0x07c00处,然后跳转到这里继续执行,此处通常是Boot Loader的代码,Boot Loader把内核加载到内存中。arch\x86\boot\tools\build工具把setup和vmlinux合成为一个bzImage,setup是实模式的代码,vmlinux是保护模式的代码。
BIOS把Boot Loader加载到0x07c00处,然后跳转到该处继续执行。此后Boot Loader会把实模式代码setup加载到0x07c00之上的某个位置,其中setup的前512字节是一个引导扇区,该扇区用于兼容和传递参数。之后Boot Loader会跳转到setup的入口,该入口点为_start。