Linux0.12引导启动程序

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()


转载于:https://www.cnblogs.com/windmissing/archive/2012/02/26/2559851.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值