Linux系统启动流程

LInux系统启动流程

1、背景

  计算机主要由底层的硬件和附着在硬件上的操作系统组成的。硬件是计算机工作的基础,但是他本身是不能

提供任何服务的。所以,我们需要通过一种软件来操作这些硬件,以便向上提供服务。这就是操作系统。所以,

Linux系统的启动流程就是从硬件到操作系统的过程。

 

2、Linux启动简单图解

3、Linux系统启动过程详细解释

第一步:开机自检,加载BIOS

  开启计算机,首先会加载BIOS。此步骤个主要是对硬件进行检查并获取相关的硬件信息。主要包括: CPU 的相关信息、设备

启动顺序信息、硬盘信息、内存信息、时钟信息、PnP 特性等等。获取相关信息后,计算机就知道他的硬件设备在哪了。接下来就

是读取MBR记录,将系统的控制权交给MBR。

第二步:加载MBR

  MBR是Master Boot Record的简称,即主引导记录。它位于磁盘上的0柱面,0磁道的第一个扇区。大小为512byte,里面存放了

系统预启动信息,磁盘分区表信息,以及分区标志。

  MBR由三个部分组成:第一部分占有446个bytes,主要是引导区,存放的是预启动指令;第二部分占64bytes,存放的是分区表

信息;第三部分占2bytes,存放的是分区的结束标志信息。

  预引导区的作用之一是找到标记为活动(ACTIVE)的分区,并将活动分区的引导区读入内存。

  系统找到 BIOS 所指定的硬盘的 MBR 后,就会将其复制到 0×7c00 地址所在的物理内存中。其实被复制到物理内存的内容就是

Boot Loader,而具体到 Linux 系统,那就是 grub了。

第三步:加载GRUP菜单,即Boot Loader引导加载器

  Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映

射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。通常,Boot Loader 依赖于硬件

而实现的,不同体系结构的系统存在着不同的 Boot Loader。

  Boot Loader 有若干种,其中 Grub、Lilo 和 spfdisk 是常见的 Loader。

  系统读取内存中的 grub 配置信息(一般为 menu.lst 或 grub.lst),并依照此配置信息来启动不同的操作系统

grup配置文件:grup菜单的详细解释请参考:

http://blog.51cto.com/oldboy/2093484
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0  -----》表示grup菜单中默认的第一个内核版本
timeout=5  -----》菜单页停留5秒
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-696.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=79123144-98e1-4a97-ab97-c0231b9d
1190 rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_
NO_LVM rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-696.el6.x86_64.img

提示:Boot Loader在准备环境时,最主要的是确定你要安装的内核版本,内核映像文件的存在位置,以便后来加载内核时使用。

  

第四步:加载内核

  根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”

的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。系统将解压后的内核放置在内存之中,并调用start_kernel()函

数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序

应该可以正常运行了。

第五步:创建init进程依据inittab文件来设定运行等级

  内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。

其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运

行在等级5上。Linux的运行等级设定如下:

  0:关机
  1:单用户模式
  2:无网络支持的多用户模式
  3:有网络支持的多用户模式
  4:保留,未使用
  5:有网络支持有X-Window支持的多用户模式
  6:重新引导系统,即重启

第六步:加载/etc/rc.d/rc.sysinit文件进行初始化

  在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括

设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。

第七步:加载内核模块

  具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。

第八步:根据/etc/inittab确定的运行级别到/etc/rc.d/rc#.d目录下启动响应的服务

  根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。

第九步:加载/etc/rc.d/rc.local文件

  rc.local 就是在一切初始化工作后,Linux 留给用户进行个性化的地方。可以把你想设置和启动的东西放到这里。

第十步:加载/etc/login程序,启动 mingetty,进入登陆界面

原文地址:https://www.cnblogs.com/myeric/p/9011803.html