吴文官 发表于 2003-5-7 09:57:43

Linux Kernel 2.4 Internals

系统引导过程:

概述:
总的来说,系统引导包括以下几个步骤:
1、BIOS选择引导设备
2、BIOS从引导设备中装入引导扇区
3、引导扇区装入setup例程,解压缩例程和压缩的内核
4、进入保护模式,解压缩内核
5、低级的初始化(汇编代码)
6、高级初始化(C代码)


一、BIOS加电自检

1、电源启动时钟发生器8284A,并向总线发出加电信号
2、8284A复位CPU,CPU进入16位实模式
3、DS、ES、FS、GS、SS清零,CS=0xFFFF0000,EIP=0x0000FFF0
这一部分由BIOS POST代码完成
4、屏蔽中断,完成自检
5、初始化中断向量表(0x0 ~ 0x400)
6、BIOS自举装入函数调用19H功能调用(作用:返回当前驱动器号),DL中保存引导设备号,装入引导设备的0道1扇区到0x7C00(0x07C0:0000)

吴文官 发表于 2003-5-7 10:12:50

二、引导扇区和setup例程

;BOOTSEG(0x07C0)送DS
movw $BOOTSEG, %ax
movw %ax, %ds

;INITSEG(0x9000)送ES
movw $INITSEG, %ax
movw $ax, %es

;CX中保存256(后边要用到)
movw $256, %cx

;SI、DI清零
subw %si, %si
subw %di, %di

;清标志寄存器
cld

;装MBR(现在位于内存中0x7C00)拷贝到0x90000
;CX中为256,每次传送一个字,传送256次,即完成了拷贝,共传送了512字节数据
rep
movsw

;跳转到0x90000,执行go处的指令
ljmp $INITSEG, $go
页: [1]
查看完整版本: Linux Kernel 2.4 Internals