从机器加电到系统核心的运行;另外一个就是系统调用,系统调用是用户程序或操作调用核
心所提供的功能的接口。对于那些对硬件比较熟悉的爱好者,从系统的引导入手进行分析,
可能来的容易一些;而从系统调用下口,则可能更合适于那些在 dos 或 Uinx、Linux 下有
过 C 编程经验的高手。这两点,在后面还将介绍到。
方法之二:以程序流程为线索,一线串珠
从表面上看,Linux 的源码就象一团扎乱无章的乱麻,其实它是一个组织得有条有理的
蛛网。要把整个结构分析清楚,除了找出线头,还得理顺各个部分之间的关系,有条不紊的
一点一点的分析。
所谓以程序流程为线索、一线串珠,就是指根据程序的执行流程,把程序执行过程所涉
及到的代码分析清楚。这种方法最典型的应用有两个:一是系统的初始化过程;二是应用程
序的执行流程:从程序的装载,到运行,一直到程序的退出。
为了简便起见,遵从循序渐进的原理,现就系统的初始化过程来具体的介绍这种方法。
系统的初始化流程包括:系统引导,实模式下的初始化,保护模式下的初始化共三个部分。
下面将一一介绍。
inux 系统的常见引导方式有两种:Lilo 引导和 Loadin 引导;同时 linux 内核也自带
了一个 bootsect-loader。由于它只能实现 linux 的引导,不像前两个那样具有很大的灵活
性(lilo 可实现多重引导、loadin 可在 dos 下引导 linux),所以在普通应用场合实际上很
少使用 bootsect-loader。当然,bootsect-loader 也具有它自己的优点:短小没有多余
的代码、附带在内核源码中、是内核源码的有机组成部分,等等。
bootsect-loader 在内和源码中对应的程序是 /Arch/i386/boot/bootsect.S 。下面
将主要是针对此文件进行的分析。
1. 几个相关文件:
<1> /Arch/i386/boot/bootsect.S
<2> /include/linux/config.h
<3> /include/asm/boot.h
<4> /include/linux/autoconf.h
2. 引导过程分析: