Linux0.12引导启动程序

来源:互联网 发布:根据小说改编的网络剧 编辑:程序博客网 时间:2024/04/30 03:18

1.从系统加电起所执行程序的顺序

ROM BIOS -----> bootsect.S -----> setup.S -----> head.s -----> main.c

其中,head.s和main.c都属于system模块

main属于初始化程序,这里不讲


2.几个程序的比较

程序名位置语言ROM BIOSROM bootsect.Sboot/bootsect.Sas86汇编语言setup.Sboot/setup.Sas86汇编语言head.sboot/head.sGNU汇编语言main.cinit/main.cC语言
3.ROM BIOS的功能

(1)执行某些系统检测

(2)在物理地址0处开始初始化中断向量

(3)将启动设备的第一个扇区读入到绝对地址0x7c00处

(4)跳转到绝对地址0x7c00处


4.bootsect.S的功能

(1)把自己移到0x90000处(本来在0x7c00)

(2)从磁盘把第2-4个扇区的setup模块读入到0x90200处(紧接着bootsect)

(3)取磁盘参数表中当前启动引导磁盘的参数

(4)显示“Loading system”字符串

(5)system模块加载到0x10000处

(6)确定要文件系统的设备号

(7)跳转到setup程序开始处(0x90200)


5. setup.S的功能

(1)读取机器系统数据,并保存到0x90000开始的位置

(2)将system模块从0x10000-0x8ffff移到0x00000-0x7ffff处

(3)加载idtr和gdtr

(4)开启A20,重新设置两个中断控制芯片8259A,将硬件中断号重新设置为0x20-0x2f

(5)设置CR0(从而进入保护模式)

(6)跳转到system模块最前面部分的head.s(0x0000)


6.head.s的功能

(1)加载各个数据段的寄存器

(2)重新设置idt

(3)重新设置gdt

(4)检测A20是否已真的开启

(5)测试PC是否含有数学协处理器芯片

(6)设置管理内存的分布处理机制

(7)将预先入围在堆栈中的/init/main.c程序的入口地址弹出,运行maina()