BIOS到Linux Boot的原理

2019-04-13 11:27发布

来自http://blog.csdn.net/huangkangying/article/details/44312757

Table of Contents

1 BIOS启动的原理

BIOS启动的原理:所有x86的CPU都设计成为加电进入16位实模式状态, CS=0xFFFF,IP=0x0000。这样启动时的第一条指针所在的地址就是 0XFFFF0.

2 BIOS对boot操作系统最至关重要的工作:

  1. 建立中断向量表(0x00000 - 0x003FF)
  2. 建立中断服务程序

3 Linux Boot的过程:

  1. BIOS执行INT 19h, 加载磁盘的第一个扇区(512 B)到 0x7C00 处.
  2. 第一个扇区的程序为引导程序,它接下来会负责第二步和第三步的程序加载
  3. bootsect会先把自己加载到 0x90000, 然后调用INT 13h加载setup.s对应的程序到0x90200 (SETUPSEG)处。最后再次调用INT 13h将kernel加载到0x10000 处。
  4. 加载完成后, SETUP开始执行,它调用INT 41h和INT 46h获取硬盘参数表1和硬盘参数表2.
  5. 关中断,EFLAGS的IF位置0,然后将system kernel(0x10000)拷贝到0x0000处。
  6. 此时,BIOS所留下的中断向量表和数据全部被覆盖,在操作系统设好IDT之前,不能再响应中断。
  7. 设置好GDT和IDT, 打开A20, 进入保护模式(CR0, PE置1),实现32位寻址。