|
发表于 2011-4-5 16:42:28
|
显示全部楼层
建议你去看看linux的内核文档,很多linux内核的书都是从开机引导开始的。
大致过程是这样的:
cpu在断点的时候会初始化ss:ip为一个固定的位置,具体是多少忘了,这个地址指向一个固定地址,地址的内容则指向bios的程序。值得注意的是,cpu并不关心这段程序是不是真的指向bios引导程序,他只是机械的去执行那些命令而已。
然后,bios会去读取硬盘的master boot record(MBR表),这个东西写在你的硬盘的0柱面、0磁头、1扇区,它有一个512b的引导程序boot loader以及硬盘分区表DPT。然后这个boot loader会把自己复制到内存上,具体位置自己查,我已经忘了。。。
然后boot loader回去查看自己这段代码最后的地方是不是aa 55假如是,就证明这个是一个引导程序,不是,就报错,然后尝试修正,没办法修正,它就输出无操作系统,然后你的计算机挂掉。。。。
这个aa 55确定之后,它会跳回开头,开始执行这段代码。
然后,这个引导程序加载下一个引导程序,并将自己复制到刚才自己所在的代码段的后面,将原本的空间让给新的引导程序。
然后可是递归,一个引导程序接着一个引导程序,直到你的计算机被引导进了操作系统,操作系统接管内存。
具体可以上网查一下linux的源代码,源代码目录下的/arch/x86/boot/ 下面的文件(x86是在你的计算机是32位的前提下的,如果是其他机型,你看看把,arch里面各种机型的代码)
另外也可以看看grub的手册,只有英文的就是了。。。
抱歉我今天感冒也许有的地方写的不对阿。 |
|