• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
eric橙子
博客园    首页    新随笔    联系   管理    订阅  订阅

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,进入登陆界面

 

posted @ 2018-05-09 09:50  eric橙子  阅读(172)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3