Linux系统的初始化 Jinsheng shi goldcattle@gmail.com 第1 页(共50 页) Linux 系统的初始化 本文的内容是讲述从Linux系统启动部分。即当你按下power 键到你看到login:的整个过程牵扯的东西很多很多。所以专门写一个专题来将将这个东西。 本文不局限于Linux的启动过程的分析,同时兼顾对系统结构方面的介绍。本文的另外一个目的是为了自己找工作,复习一下相关的知识。 与这个部分相关的代码主要是: 1、 Bootsect.s,setup.S 和 head.S 2、 Init 目录下面的main.c /arch/i386 下面的其他代码也是很重要的。 1、 基础知识 1.1 386 的体系结构 80386 的芯片内部被分为独立的六个处理部件:总线接口部件,执行部件和分段部件,分页部件,指令预取和指令译码部件。其中分段部件和分页部件统称为MMU 内存管理部件。这六个部件是并行工作的,构成了一个6 级流水体系结构,从而大大提高了处理效率。对于程序设计人员来讲要了解386 的寄存器结构要比知道物理上的实现更加重要。80386 的内部有30 多个寄存器。其中可以分为如下五类:通用寄存器,段寄存器,系统地址寄存器,控制 寄存器,以及 调 试 和测 试 寄存器。 1.1.1 通用寄存器: 在 应 用程序用来对程序的数 据 进 行存取和计算 。80386 有8 个32 位 的通用寄存器,如下图1.2 所示 。他们 是在16 位 寄存器的扩 展 。故 命 名 为EAX,EBX,ECX,EDX,EBP,ESI,EDI和 ESP。数 据 可以是1 位 ,8 位 ,16 位 ,32 位 和 64 位 (MMX)。访 问 寄存器的尺 寸 可以为8位 ,16 位 ,和 32 位 ,并给 不同的尺 寸 赋 予 不同的名 字 。比如EAX 是32 位 ,AX 是16 位 ,AL 和 AH 是8 位 。 两 个附 加寄存器保 留 了当前 指令流的状 态 信 息 。EIP 寄存器包 含 的是当前 指令的下一条指令的偏 移 地址。EFLAGS 中包 含 了与各 个指令相关的信 息 位 。EIP 或 IP 与CS 段寄存器共同指出 了下一条 被执行指令的存储 器地址。 EFLAGS 的寄存器包 含 如下字 段: 图 1.1 EFLAGS 寄存器(图 来源 于IA32 手 册 ) CF 进 位 标 志 PF 奇 偶 标 志 当某 个算 术 运 算 操 作生 成有偶 数 个1 时,该 位 被置 位 AF 辅 助 进 位 标 志 当AL 的寄存器低 半 个字 节 发 生 进 位 时被置 位 。由 BCD 码控 制 。 L...