3、引导启动程序
引导启动程序主要是指/boot目录中的三个汇编文件:
- bootsect.s
- head.s
- setup.s
- bootsect.s和setup.s采用近似于Intel的汇编语言语法,需要使用Intel 8086汇编编译器和连接器as86和ld86
- head.s使用GUN的汇编程序格式(AT&T语法),需要用GNU的as进行编译。
- 这里使用两种编译器的主要原因是由于对于Intel x86处理器系列来讲,GNU的编译器仅支持i386及以后出的CPU,不支持生成运行在实模式下的程序。
Linux启动流程:
- PC电源打开后,80x86结构的CPU将自动进入实模式,从地址0xFFFF0开始自动执行程序代码,这个地址通常是ROM-BIOS中的地址;
- PC机的BIOS将执行某些系统的检测,并在物理地址0处开始初始化中断向量;
- 将可启动设备的第一个扇区(磁盘引导扇区,512字节,对应的是boot/bootsect.s)读入内存绝对地址0x7C00(31KB)处,并跳转到这个地方。
- boot/bootsect.s被执行时,会把自己移到绝对地址0x90000(576KB)处,并把启动设备中后2KB字节代码(boot/setup.s)读入到内存0x90200处,
- 内核的其他部分(system模块)则被读入到从地址0x10000开始处,当时system模块的长度不会超过0x80000字节大小(512KB),所以它不会覆盖在0x90000处开始的bootsect和setup模块
- setup程序将会把system模块移动到内存起始处,这杨system模块中代码的地址也即等于实际的物理地址,便于对内核代码和数据的操作。