0.11LINUX读核日记(1)
之所以要读LINUX内核是因为自己想完全弄懂计算机从加载电源到正常运行程序的过程。而选定0.11版本是因为手头上有一本赵炯博士写的《LINUX完全注释》。呵呵,闲话少说,还是转到读码中。。。。
计算机在加电后,BIOS启动一个程序进行主机自检,自检结束后,自检程序将控制权还给BIOS,BIOS读取BIOS设置,得到引导驱动器的的顺序,然后依次检查,得到可以用来引导的驱动器(往往指得是硬盘),BIOS将所检查的磁盘的第一扇区(512B)放入内存,放在0X0000:0X7C00处。如果发现这个扇区的511,512位是0X55AA,就确定这是一个引导扇区。在LINUX0.11中,BOOTSECT。S就是写在第一扇区内,并且最后的511,512位是0X55AA,所以确定它是引导程序。
BOOTSECT。S程序装入内存0X0000:0X7C00处后,执行这段汇编程序。下面我画出这段程序的流程图
[BOOTSECT。S先把自身移到了0X9000处]------》[然后调用BIOS0X13中断来读区SETUP。S程序,把SETUP。S放在0X9200处]-----》[得到磁盘驱动器的参数]-----》[然后输出SYSTEM LOADING信息]-----》[加载SYSTEM模块到0X1000处]-----》[关闭磁盘驱动器]-----》[检查引导驱动器类型]-----》[执行SETUP程序]
参考书籍《LINUX完全注释》,《操作系统引导探究》,《LINUX0.11源码分析》