深入剖析linux启动过程

深入剖析linux启动过程
  linux系统的启动过程是由很多步骤组成的,但是,无论你是启动一个标准的x86桌面计算机,还是一个嵌入式PowerPC的目标板,大多数的流程是惊人得相似的。这篇文章,探索了linux从最初的启动准备到用户空间中某个程序被开启之间的启动过程,跟随这个流程,你还能学到其他许多与启动有关的知识,例如,boot loaders,内核解压缩,初始化内存盘,以及其他一些linux启动的部分。
  在很早的时候,启动一个计算机意味着去喂那些包含启动程序的纸带,或者通过手工使用前面板那密密麻麻的地址/数据/控制开关来加载启动程序,但是,简化这个流程并非必须的。
  让我们首先从一个较高的高度上来对linux的启动做一个全面的分析,然后,我们会回顾一下,在每一个独立的过程中,发生了什么事情。在这途中的参考源代码将帮助你在内核树中不至于迷失方向,并能继续深入挖掘下去。
  一、 概述 对启动过程的整体回顾:
  当系统一开始被启动,或者重新启动时,处理器将在众所周知的位置执行代码。在个人电脑上,这个位置处于基本输入输出系统中,也就是我们所说的BIOS,它是被存储在主板上的闪存中的。在嵌入式系统中,中央处理器(CPU)则将复位区域激活,来开始执行flash或者ROM中的已知的程序。在其它情况中,基本的过程是一样的。由于个人电脑提供了众多灵活的可选设备,BIOS必须确定,由哪一个设备来执行启动过程。在接下来的文章中我们将涉及这方面的更多的内容。
  当找到启动设备时,第一阶段所用的boot loader被装载到RAM中并被执行。这里的boot loader在大小上小于一个扇区的大小,也就是512字节,而它的任务,就是加载第二阶段的boot loader。
  当负责第二阶段的boot loader位于内存中并被执行时,通常会显示一个一闪而过的屏幕,然后linux以及可选的初始化内存盘(一种临时的根文件系统l)会被装载到存储器中。当系统镜像被加载时,第二阶段的boot loader将把控制权转交给内核镜像,与此同时,内核开始自解压并初始化。在这个阶段,第二阶段的boot loader会检查系统的硬件,枚举那些附加的硬件设备,挂载根设备,之后加载需要的内核模块。完成之后,第一个用户空间程序(init)开始执行,更高层次的系统初始化开始。
  这就是从表面上看,linux的启动过程。好了,现在,让我们更进一步,更深入地探索linux启动过程中的一些细节。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2a2ae4c763fc7f70549b8971e1bc8e70.html