您的位置:首页 > 运维架构 > Linux

linux内核bootsect.S和setup.S流程

2015-07-26 19:13 495 查看
bootsect.S和setup.S两个文件是为了完成将内核加载到内存,并跳转到内核执行而写的。bootsect.S是由BIOS加载到内存的,只有512个字节,无法完成跳转到内核执行的任务,所以写了setup.S文件,该文件有2KB大小,当然该文件可以更加的大。该文件完成进入32位模式并跳转到内核执行的任务,且该文件实现了通过BIOS中断获取硬件信息的任务,当然该任务也可以有内核完成。

bootsect.s流程

将0x07c00的代码移动到0x90000处并跳转到0x90000处继续执行。

(0x07c00的代码BOIS加载的引导扇区)

跳转后重新设置寄存器(设置段寄存器为0x9000,sp为0x4000-12,代码段,数据段,堆栈段都设置完毕)

从内存0x00078复制原软驱参数表到0x94000-12处,然后修改表中的每磁道最大扇区数为18.

加载setuo模块(后面的4个扇区)到内存0x90200处。如果出错显示提示,重试。

加载system模块至0x10000处

确定根设备系统号

setup.s流程

使用中断获取所需信息

将0x100000处程序移动到0x01000处

加载暂时使用的ldt和gdt,gdt基地址为0x00000000

开始32为地址线

初始化中断控制器

开启32位保护模式并跳转到0x00001000处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: