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

linux0.11 引导启动程序目录boot/分析

2011-04-18 11:44 351 查看
boot/包含三个汇编文件:bootsect.s,setup.s,head.s。bootsect.s程序是磁盘引导块程序,编译后会驻留在磁盘的第一个扇区中(引导扇区,0磁道,0磁头,第一个扇区),在PC加电ROM-BIOS自检后,将被BIOS加载到内存0X7C00处执行。setup.s程序主要用于读取机器的硬件配置参数,把内核模块system移动到适当的内存位置处。head.s程序会被编译连接在system模块的最前部分,主要进行硬件设备的探测设置和内存管理页面的初始化设置。

BIOS: PC上电后,执行ROM-BIOS中0XFFFF0处代码,将编译后的bootsect模块加载到0X7C00处,在绝对地址0处加载1KB的中断向量表。

bootsect:将自己(bootsect.s而并非编译后的bootsect模块)移动到0X90000处,利用BIOS中断int 0x13将setup模块从此磁盘第2个扇区处读4个扇区的数据到0X90200处,获取磁盘驱动器参数(为读system模块做准备),显示"loading system", 将system模块读到0X10000处,确定根文件系统的设备号。

setup.s: 利用BIOS中断int 0x10,int 0x15获取机器的硬件配置参数,将system模块从0X10000移动到0X00000处,加载idt, gdt,开启A20地址线,对8259A编程重新设置IRQ0~IRQ15的中断向量号,将CRO中的PE位置位,进入保护模式。

head.s: 加载各数据寄存器,设置并加载idt,gdt,检查A20地址线,数字协处理,将内核页目录和4个页表放到0X00000处并设置其页表项,将CRO的PG位置位开启分页机制,跳转到init/main.c的main函数处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: