关于bootsect.S Linux开机过程的分析( 三 )


.;
.;
kill_motor:;
pushdx;
movdx,#0x3f2;
xoral,al;
outb;
popdx;
ret;
.;
.;
首先利用DX指定要输出的port,而03f2这个port则是代表了软盘控制器(floppydis;
kcontroller)的所在,再利用outb将资料送出,而我们送出的资料,当然就是归零过的;
AL了 。如此一来,软盘的马达就停止了 。;
第六步;
接下来做的事是检查rootdevice,之后就仿照一开始的方法,利用indirectjump跳;

至刚刚已读入的setup部份,程序码如下:;
.;
.;
jmpi0,SETYPSEG;
其中SETUPSEG已在先前定义为0x9020,所以CS:IP会设定为9020:0000,即跳到绝对;
地址为0x90200,也就是setup的起点 。而bootsect也大功告成了 。;
到此为止,内存的内容应该如下图所示:;
比较;
把大家所熟知的MSDOS与linux的开机部份做个粗浅的比较,MSDOS由位于磁盘上boo;
tsector的boot程序负责把IO.SYS载入内存中,而IO.SYS则负有把DOS的kernel--MSDOS.;
SYS载入内存的重责大任 。而linux则是由位于bootsector的bootsect程序负责把setup及;
linux的kernel载入内存中,再将控制权交给setup 。;
至于setup.S,就留到下一次再来讨论了 。;

推荐阅读