引导 Linux® 系统的过程包括很多阶段。不管您是引导一个标准的 x86 桌面系统,还是引导一台嵌入式的 PowerPC® 机器,很多流程都惊人地相似。本文将探索 Linux 的引导过程,从最初的引导到启动第一个用户空间应用程式。在本文介绍的过程中,您将学习到各种和引导有关的主题,例如引导加载程式、内核解压、初始 RAM 磁盘连同 Linux 引导的其他一些元素。
早期时,启动一台电脑意味着要给电脑喂一条包含引导程式的纸带,或手工使用前端面板地址/数据/控制开关来加载引导程式。尽管现在的电脑已装备了很多工具来简化引导过程,但是这一切并没有对整个过程进行必要的简化。
让我们先从高级的视角来查看 Linux 引导过程,这样就能够看到整个过程的全貌了。然后将回顾一下在各个步骤到底发生了什么。在整个过程中,参考一下内核源代码能够帮助我们更好地了解内核源代码树,并在以后对其进行深入分析。
概述
图 1 是我们在 20,000 英尺的高度看到的视图。
图 1. Linux 引导过程在 20,000 英尺处的视图
当系统首次引导时,或系统被重置时,处理器会执行一个位于已知位置处的代码。在个人电脑(PC)中,这个位置在基本输入/输出系统(BIOS)中,他保存在主板上的闪存中。嵌入式系统中的中央处理单元(CPU)会调用这个重置向量来启动一个位于闪存/ROM 中的已知地址处的程式。在这两种情况下,结果都是相同的。因为 PC 提供了很多灵活性,BIOS 必须确定要使用哪个设备来引导系统。稍后我们将周详介绍这个过程。
当找到一个引导设备之后,第一阶段的引导加载程式就被装入 RAM 并执行。这个引导加载程式在大小上小于 512 字节(一个扇区),其作用是加载第二阶段的引导加载程式。
当第二阶段的引导加载程式被装入 RAM 并执行时,通常会显示一个动画屏幕,并将 Linux 和一个可选的初始 RAM 磁盘(临时根文档系统)加载到内存中。在加载映像时,第二阶段的引导加载程式就会将控制权交给内核映像,然后内核就能够进行解压和初始化了。在这个阶段中,第二阶段的引导加载程式会检测系统硬件、枚举系统链接的硬件设备、挂载根设备,然后加载必要的内核模块。完成这些操作之后启动第一个用户空间程式(init),并执行高级系统初始化工作。
这就是 Linux 引导的整个过程。现在让我们深入挖掘一下这个过程,并深入研究一下 Linux 引导过程的一些周详信息。
系统启动
系统启动阶段依赖于引导 Linux 系统上的硬件。在嵌入式平台中,当系统加电或重置时,会使用一个启动环境。这方面的例子包括 U-Boot、RedBoot 和 Lucent 的 MicroMonitor。嵌入式平台通常都是和引导监控器搭配销售的。这些程式位于目标硬件上的闪存中的某一段特别区域,他们提供了将 Linux 内核映像下载到闪存并继续执行的方法。除了能够存储并引导 Linux 映像之外,这些引导监控器还执行一定级别的系统测试和硬件初始化过程。在嵌入式平台中,这些引导监控器通常会涉及第一阶段和第二阶段的引导加载程式。
|
在 PC 中,引导 Linux 是从 BIOS 中的地址 0xFFFF0 处开始的。BIOS 的第一个步骤是加电自检(POST)。POST 的工作是对硬件进行检测。BIOS 的第二个步骤是进行本地设备的枚举和初始化。
给定 BIOS 功能的不同用法之后,BIOS 由两部分组成:POST 代码和运行时服务。当 POST 完成之后,他被从内存中清理了出来,但是 BIOS 运行时服务依然保留在内存中,目标操作系统能够使用这些服务。
要引导一个操作系统,BIOS 运行时会按照 CMOS 的配置定义的顺序来搜索处于活动状态并且能够引导的设备。引导设备能够是软盘、CD-ROM、硬盘上的某个分区、网络上的某个设备,甚至是 USB 闪存。
通常,Linux 都是从硬盘上引导的,其中主引导记录(MBR)中包含主引导加载程式。MBR 是个 512 字节大小的扇区,位于磁盘上的第一个扇区中(0 道 0 柱面 1 扇区)。当 MBR 被加载到 RAM 中之后,BIOS 就会将控制权交给 MBR。
第一阶段引导加载程式
MBR 中的主引导加载程式是个 512 字节大小的映像,其中包含程式代码和一个小分区表(参见图 2)。前 446 个字节是主引导加载程式,其中包含可执行代码和错误消息文本。接下来的 64 个字节是分区表,其中包含 4 个分区的记录(每个记录的大小是 16 个字节)。MBR 以两个特别数字的字节(0xAA55)结束。这个数字会用来进行 MBR 的有效性检查。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




