收录查询

[转]内核引导启动程序-------的一些说明

bootsect.s:该程序的主要作用是首先将setup模块从磁盘加载到内存,紧接着bootsect后面的位置,然后利用BIOS中断0X13取磁盘参数表中当前启动引导盘的参数,接着在屏幕上显示“LOADING SYSTEM...”字符串,再将system模块从磁盘上加载到内存0X10000开始的地方。随后确定根文件系统的设备号,若没有设定,则根据保存的引导盘的每磁道扇区数判别出盘的类型和种类并保存其设备号于root_dev,最后长跳转到setup程序的开始处执行setup程序。

setup.s:setup程序的主要作用是利用ROM BIOS中断读取机器系统数据,并将这些数据保存到0X90000开始的位置。然后该程序将system模块从0X10000处移到0X00000处。接下来加载中断描述符表寄存器和全局描述符表寄存器,开启A20地址线,重新设置两个中断控制芯片8259A,将硬件中断号重新设置为0X20-0X2F。最后设置CPU的控制寄存器CR0,从而进入32位保护模式运行,并跳转到位于system模块最前面部分的head.s程序继续运行。

head.s:首先是加载各个数据段寄存器,重新设置中断描述符表IDT,并使各个表项指向一个只报错误的哑中断程序。然后重新设置全局描述符表GDT。接着使用物理地址0与1MB开始处的内容相比较的方法,检测A20地址线是否已真的开启,如果检测下来没有真的开启,则进入死循环。然后检测PC机是否含有数学协处理器芯片,并在控制寄存器CR0中设置相应的标志位。接着设置管理内存的分页处理机制,将页目录表放在绝对物理地址0处,紧随后面放着共可寻址16MB内存的4个页表,并分别设置它们的表项。最后利用返回指令将预先放置在堆栈中的/init/main.c程序入口地址弹出,去运行main()程序。

posted @ 2006-09-24 17:21  ->  阅读(238)  评论(0编辑  收藏  举报