原文地址:http://os.51cto.com/art/200706/49690.htm

1.简介

  Linux启动过程指的是从加电到看到shell提示的这一段时间。

  Linux启动的过程可以大概分为几个个阶段,具体划分为几个阶段则依靠具体的系统实现。一般来说,基于X86架构的系统可以分为3个阶段;一些嵌入式的系统有的分为两个阶段,有的分为3个阶段。

  很多介绍linux系统启动的文章对细节部分都描述的不清楚,那就让我来详细的说一下吧,如果由错误,请多包含了:)

2. 启动过程之上电与加载引导程序 

  无论是哪种系统,linux启动的第一阶段总是CPU上电初始化的阶段。

  CPU在上电之后首先是自检的过程,当这个过程完成之后,CPU就会跳转到一个固定的地址,从这个地址开始执行代码。这个固定的地址根据CPU的不同而不同,比如PC中的这个地址是0XFFFF0。而这个固定的地址通常是一些只读的或者可读写的闪存,CPU通过总线和这些闪存连接,并能够通过寻址机制找到这些闪存的地址。

  在普通PC中,BIOS系统是一个‘加载第一个引导程序’的系统,PC的CPU上电后执行的第一行代码总是BIOS中的闪存所保存的代码,这段代码可以看作是一个启动环境,它完成的工作有两部分:基本硬件加电检测与本地设备的枚举与初始化。当完成加电检测后,这段BIOS代码(完成加电检测的代码)会被从内存中清除,但是BIOS的系统运行时服务代码开始运行,这段代码检测CMOS的配置,其实也就是看看用户配置的从哪个设备启动,当BIOS的运行时服务代码找到用户配置的启动设备后,就从此设备中将第一个引导程序的代码拷贝到RAM中,至此,BIOS的任务顺利完成。剩下的事情交给‘第一个引导程序’来继续吧。需要注意的是这个所谓的‘第一个引导程序‘肯定保存在用户选择的设备中,并且BIOS的运行时服务代码知道这个引导程序保存的地址,要不怎么把它搞到RAM中去啊?

  而在嵌入式系统中可能没有BIOS这样的系统,但是肯定也有一块类似的闪存/ROM,CPU可以从这个ROM的地址上开始执行代码,而这段代码肯定是一个启动环境,也就是一段特殊的程序了,比如U-BOOT什么的。这段程序肯定保存在闪存的固定位置,要不您让CPU怎么找?这段程序干什么呢?它们提供了将Linux系统映象下载到闪存并继续执行的方法,除了可以存储并引导Linux映象之外,这些程序还可能执行一定级别的系统测试和硬件初始化过程。嵌入式系统的这段启动环境代码就类似与PC中的‘第一个引导程序’代码,也就是和硬盘MBR中包含的主引导程序类似。

  在PC Linux启动中,当BIOS发现是由硬盘引导系统后,就找到此硬盘的MBR,将MBR中保存的引导程序加载到RAM中,然后将CPU的控制权交给MBR中的这段代码,BIOS的任务到此算是全部完成了。所以说,BIOS从上电到现在忙活了大半天,主要目的就是为了找到引导设备,并将引导设备的引导程序加载到RAM中来运行。BIOS好人啊!

3.第一阶段引导程序

  MBR中的代码就是所谓的‘第一阶段引导程序’。

  它分为三个部分,第一部分是真正的代码,即BootLoader代码部分,就是一段可执行的代码;第二部分是一个64字节的分区表,包含四个分区记录;第三部分是结束标识符(0XAA55),用来做MBR的有效性检测。

  ‘第一阶段引导程序’的作用是查找并加载‘第二阶段引导程序’。它通过在分区表中查找一个活动分区来实现此功能。在MBR的第二部分所标识的四个分区中,只有一个是活动分区,通常这个活动分区记录包含了真正分区的信息,Bootloader通过这个信息找到真正的分区,然后从这个分区将‘第二阶段引导程序’加载进RAM中。

4.第二阶段引导程序 

  第二阶段引导程序可以认为是引导过程的最后一步了,它的核心任务就是加载Linux内核与可选的初始化RAM盘。

  在PC环境中,现在通常使用grub来实现引导程序。Grub相对应lilo来说一个最大的优点就是grub可以识别硬盘分区。其实在第一阶段引导程序加载第二阶段引导程序之前,第一阶段引导程序会先引导一个第1。5阶段引导程序进入RAM执行,这段代码可以理解为包含linux系统映象的特殊文件系统,当此引导程序运行后,就会加载第二阶段引导程序了。第二阶段引导程序主要是grub的工作,就是使用我们事先配置好的grub来加载相应的内核映象与初始化RAM盘到内存中。

  当内核影响与初始化RAM盘加载成功后,第二阶段引导程序的任务也就胜利完成了,剩下的活都交给内核映象吧。

5.内核启动过程

  当第二阶段引导程序完成任务,内核映象取得CPU控制权后,内核的旅程就开始了,终于等到这一天了!

  可惜,此时的内核映象并不是一个可执行的程序,而是一个压缩过的程序,使用zlib压缩而成。其实此内核映象包括两个部分,最前端的部分是一小段的可执行代码,后面才是真正的内核映象。前端部分的主要工作是初始化少量的硬件设置,然后解压缩内核映象并将解压缩后的内核放入高端内存中。此时如果发现由初始化RAM盘,则将其移入内存中,暂时不用。然后,解压缩后的内核取得了CPU的控制权,内核开始行动了!

  内核启动后,首先对页表进行初始化,并启动内存分页功能,然后检测CPU类型,然后调用start_kernel()函数,进入与体系无关的初始化部分,包括内存配置,加载初始化RAM盘,最后启动init函数,至此内核启动阶段就结束了。

转载于:https://www.cnblogs.com/vurtne-lu/p/6566475.html

了解Linux操作系统的引导过程相关推荐

  1. linux操作系统的引导过程,深入了解linux操作系统引导过程详解

    Linux操作系统的引导过程:开机自检.mbr引导.grub菜单.加载linux内核.init进程初始化. 1.开机自检,检测硬件后根据启动顺序将控制权交给本机硬盘 2.mbr引导,根据硬盘的主引导记 ...

  2. Linux的引导过程与服务控制

    引导过程与服务控制 Linux操作系统的引导过程 系统初始化进程 init进程 Systemd Systemd单元类型 运行级别所对应的Systemd目标 排除启动类故障 修复MBR扇区故障 故障原因 ...

  3. Liunx操作系统的引导过程(系统操作引导过程,模拟MBR,GRUB故障,root密码遗忘解决,优化启动过程 ,运行级别的分类)

    文章目录 Liunx操作系统的引导过程 引导过程 Blos自检 MBR 引导 grub引导菜单(Boot Loader) 内核启动 启动init进程,依据inittab文件设定运行级别 系统初始化进程 ...

  4. 在Linux系统下初始化COM组件,Linux操作系统的引导和初始化.doc

    Linux操作系统的引导和初始化 系统引导和初始化概述 相关代码(引导扇区的程序及其辅助程序,以x86体系为例): \linux-2.4.22\arch\i386\boot\bootsect.S:Li ...

  5. Linux系统引导过程及排除启动故障

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一.Linux操作系统引导过程 二.系统初始化进程 三.排除启动类故障 3.1模拟修复MBR扇区故障问题 3.2  修复GRUB ...

  6. Linux系统引导过程(BIOS和Bootloader部分)

    Linux系统引导过程(BIOS和Bootloader部分) 刘建文( http://blog.csdn.net/keminlau ) KEY:x86体系 CPU 系统引导 启动过程 Linux LI ...

  7. Linux——操作系统引导过程

    引导过程 一.Linux操作系统引导过程 1.1 引导过程讲解 1.2 init进程(CentOS6) 1.3 Systemd进程(CentOS7) 1.4 Systemd单元 1.5 运行级别对应的 ...

  8. linux引导分区是什么,Linux的引导过程剖析

    大家在安装完Linux后,有没有留心过Linux的引导过程呢?本文就尝试以通俗的语言来描述这一过程和相关的各种情况,了解了Linux的引导过程后,您在面对Linux引导过 程的出现的各种问题时就能做到 ...

  9. Linux系统引导过程及修复

    Linux系统引导过程及修复 1.通电 2.bios初始化 2.1 bios简介 2.2作用 3.磁盘引导 3.1mbr 3.2当mbr数据丢失系统会因为找不到启动分区而停止启动 3.2.1问题模拟方 ...

  10. Linux系统引导过程及故障排除

    Linux系统引导过程及故障排除 一.Linux操作系统引导过程 二.系统初始化进程 三.排除启动类故障 (一)修复MBR扇区故障 (二)修复GRUB引导故障 (四)遗忘root用户的密码 一.Lin ...

最新文章

  1. 深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)
  2. js练习 好友列表选择
  3. mongodb数据合并设计_「时间序列数据」和MongoDB(二)-模式设计最佳实践
  4. 寒武纪芯片——有自己的SDK,支持tf、caffe、MXNet
  5. EditText图文混排
  6. 验证回文串Python解法
  7. mysql里的max怎么用_MySQL中的max()函数使用教程
  8. hduoj 2546饭卡
  9. 关于ubuntu 14.04 dpkg 问题
  10. 前端学习(914):offerset和style区别
  11. Per-FedAvg:联邦个性化元学习
  12. 挖掘频繁模式、关联和相关性:基本概念和方法
  13. tum数据集_数值预报尚能战否?来自数据驱动的挑战
  14. 达观数据:Tornado原理浅析及应用场景探讨
  15. 计算机桌面的照度,学校建筑实验室实验桌面照度标准值?
  16. 网络广告公司的恐慌 XSS广告终结者(html5新特性)
  17. 微盾php脚本解密,微盾php解密(黑刀微盾解密专家)
  18. 金额小写转大写 java_JAVA 小写金额转换大写金额
  19. 计算机网络之广域网基础以及华为eNSP实验配置
  20. rstudio查询命令_RStudio终端操作

热门文章

  1. 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
  2. 用CentOS 6快速配置一台企业级Web代理服务器
  3. JS 回车提交,兼容IE、火狐、Opera、Chrome、Safari
  4. Xbox360手柄驱动xbcd+
  5. ubuntu常用软件安装集合:360浏览器、QQ--持续更新
  6. 洛谷1004方格取数
  7. C++ Primer 第八章 标准IO库(转载)
  8. 20172330 2018-2019-1 《程序设计与数据结构》实验一报告
  9. 二、JAVA基础、语法
  10. 还在繁琐的敲MVP接口和实现类吗,教你一秒搞定。