今天终于把难住了几天的《linux内核完全剖析》第4章中的boot.s读懂了。真是有点兴奋,因此写下作为纪念。
1、首先由BIOS在计算机启动的时候将引导区中的程序(也即boot)自动加载到内存的0x7C00处;
2、系统跳转到内存的0x7C00处开始执行boot程序;
3、在boot中首先通过0x13硬盘IO中断将紧接在引导区(boot之后)的内核代码程序(head程序)加载到内存的0x1000处;
4、接着boot再通过使用循环拷贝指令rep movw将head从内存的0x1000处拷贝到内存的0x0000处;(这里采用rep movw循环拷贝指令的目的是这个指令根据CX寄存器设置的次数来重复从DS:SI处开始拷贝到ES:DI处,而且整个指令就如同单一的指令一样,从而使得NMI中断不能发生在这个拷贝过程中)
5、通过设置GDTR设置代码段和数据段的描述符都指向内存0x0000处;
6、最后boot通过段间跳转指令jmpi跳转到内存0x0000处的代码段处开始执行head内核代码。
原创作者:赖秋林
花开花败2011 于 2011-02-12 19:06:50发表:
我顶
weidele 于 2009-10-18 02:11:44发表:
Read The Fucking Source Code!
lacrimosa 于 2009-10-16 21:25:21发表:
我没钱了?
lacrimosa 于 2009-10-16 21:24:50发表:
这里资源还不少,我喜欢,呵呵。
jawanli 于 2009-08-17 20:35:31发表:
这书看起来要看个大半年哟!
js001sdx 于 2009-08-07 15:34:26发表:
强烈顶起
刘冲 于 2009-06-07 23:48:58发表:
学习万岁!
zhenyongyuan 于 2009-06-07 10:44:12发表:
1# Alsdwdz
不错,有过这样的理解心里就清楚多了。嘿嘿