读书人

linux 容易分析

发布时间: 2012-12-30 10:43:14 作者: rapoo

linux 简单分析
为了提高自己,不知不觉踏上了linux源码分析之路了!
我选择linux源码版本是linux 0.11,为什么选择它?因为它代码量少且资料多。

针对它的分析是建立于网上资料之上(快捷、效果好)。

项目如图:

linux 容易分析

该项目是网上某某已经编译好了,并且对它进行了分析。笔者只是学习他的皮毛。

首先进入项目的是bootsect:这个程序是linuxkernel的第一个程序,包括了linux自己的bootstrap程序,但是在 说明这个程序前,必须先说明一般IBMPC开机时的动作(此处的开机是指"打开PC的电源" )。它是第一个被读入内存中并执行的程序,现在,我们可以开始来看看到底它做了什么。

第一步 :bootsect将它"自己"从被ROMBIOS载入的绝对地址0x7C00处搬到0x90000处, 然后利用一个jmpi(jumpindirectly)的指令,跳到新位置的jmpi的下一行去执行…

表示将跳到CS为0x9000,IP为offset"go"的位置(CS:IP=0x9000:offsetgo),其中I NITSEC=0x9000定义于程序开头的部份,而go这个label则恰好是下一行指令所在的位置。

第二步:接着,将其它segmentregisters包—S,ES,SS都指向0x9000这个位置,与CS看齐 。

第叁步:接着利用BIOS中断服务int13h的第0号功能,重置磁盘控制器,使得刚才的设定发挥功能。

第四步:完成重置磁盘控制器之后,bootsect就从磁盘上读入紧邻着bootsect的setup程序, 也就是以后将会介绍的setup.S,此读入动作是利用BIOS中断服务int13h的第2号功能。

第五步:再来,就要读入真正linux的kernel了,也就是你可以在linux的根目录下看到的"v mlinuz"。

第六步:接下来做的事是检查root device,之后就仿照一开始的方法,利用indirect jump跳到刚刚已读入的setup部份。

//// 协处理器出错处理函数。// 中断处理程序调用的C 函数,参见(kernel/math/system_call.s,145 行)。voidmath_error (void)

学习的目标是成熟!~~

读书人网 >UNIXLINUX

热点推荐