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