Linux启动过程

参考:

http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html

http://blog.51cto.com/mrxiong2017/2084767

http://www.cnblogs.com/changxr/p/8023341.html

 

一、概述

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

第二步:读取MBR

第三步:Boot Loader grub引导菜单

第四步:加载kernel内核

第五步:运行init进程

第六步:init进程执行rc.sysinit

第七步:init进程执行不同运行级别的脚本程序

第八步:init进程执行执行/etc/rc.d/rc.local

第九步:执行/bin/login程序,启动mingetty,进入登录状态

图解:

二、详解

第一步:开机自检,加载BIOS
        BIOS(Basic Input/Output System),基本输入输出系统,该系统存储于主板的ROM芯片上,计算机在开机时,会最先读取该系统,然后会有一个加电自检过程,这个过程其实就是检查CPU和内存,计算机最基本的组成单元(控制器、运算器和存储器),还会检查其他硬件,若没有异常就开始加载BIOS程序到内存当中。BIOS主要的一个功能就是存储了磁盘的启动顺序,BIOS会按照启动顺序去查找第一个磁盘头的MBR信息,并加载和执行MBR中的Bootloader程序,若第一个磁盘不存在MBR,则会继续查找第二个磁盘(PS:启动顺序可以在BIOS的界面中进行设置),一旦BootLoader程序被检测并加载内存中,BIOS就将控制权交接给了BootLoader程序。

第二步:读取MBR
        BIOS自检,首先会在一个Boot Sequence程序中搜索可以让系统启动的引导设备(比如我们有时在BIOS中设置为从硬盘启动,或者从CD-ROM启动等等)
        这时如果BIOS找不到可以引导的设备及相关程序后,便会启动失败,如果顺序的找到了相关设备硬盘,那么BIOS将把控制权交给启动设备中的MBR(Master Boot Record)主引导记录
MBR(Master Boot Record),主引导记录,MBR存储于磁盘的头部,大小为512bytes,其中,446bytes用于存储BootLoader程序,64bytes用于存储分区表信息,最后2bytes用于MBR的有效性检查。

第三步:Boot Loader grub引导菜单
        GRUB(Grand Unified Bootloader),多系统启动程序,其执行过程可分为三个步骤:
          Stage1:这个其实就是MBR,它的主要工作就是查找并加载第二段Bootloader程序(stage2),但系统在没启动时,MBR根本找不到文件系统,也就找不到stage2所存放的位置,因此,就有了stage1_5
    Stage1_5:该步骤就是为了识别文件系统
    Stage2:GRUB程序会根据/boot/grub/grub.conf文件查找Kernel的信息,然后开始加载Kernel程序,当Kernel程序被检测并在加载到内存中,GRUB就将控制权交接给了Kernel程序。
        实际上这个步骤/boot还没被挂载,GRUB直接识别grub所在磁盘的文件系统,所以实际上应该是/grub/grub.conf文件,该配置文件的信息如下:
grub.conf:

#boot=/dev/sda

    default=0        #设定默认启动的title的编号,从0开始

    timeout=5       #等待用户选择的超时时间

    splashimage=(hd0,0)/boot/grub/splash.xpm.gz    #GRUB的背景图片

    hiddenmenu     #隐藏菜单

    title CentOS (2.6.18-194.el5PAE)      #内核标题

        root (hd0,0)         #内核文件所在的设备

        kernel /vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/     #内核文件路径以及传递给内核的参数

        initrd /initrd-2.6.18-194.el5PAE.img                            #ramdisk文件路径

第四步:加载kernel内核

操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。

[root@HikvisionOS boot]# ll /boot
总用量 151696
-rw-r--r--. 1 root root   137701 9月   8 2017 config-3.10.0-514.26.2.el7.x86_64
-rw-r--r--  1 root root   147859 9月  26 23:15 config-3.10.0-862.14.4.el7.x86_64
drwx------  3 root root    16384 1月   1 1970 efi
drwxr-xr-x. 2 root root       26 2月   7 2018 grub
drwx------. 5 root root     4096 10月 16 11:33 grub2
-rw-r--r--. 1 root root 45305074 2月   7 2018 initramfs-0-rescue-2216fbd88166481a85c5fe5e50457dcc.img
-rw-------. 1 root root 17239102 2月   7 2018 initramfs-3.10.0-327.el7.x86_64.img
-rw-------  1 root root 20460923 10月 16 11:33 initramfs-3.10.0-514.26.2.el7.x86_64.img
-rw-------  1 root root 13184139 10月 16 11:31 initramfs-3.10.0-514.26.2.el7.x86_64kdump.img
-rw-------  1 root root 20762979 10月 16 11:33 initramfs-3.10.0-862.14.4.el7.x86_64.img
-rw-------  1 root root 13135074 10月 18 10:00 initramfs-3.10.0-862.14.4.el7.x86_64kdump.img
-rw-r--r--. 1 root root   607007 2月   7 2018 initrd-plymouth.img
-rw-r--r--. 1 root root   277955 9月   8 2017 symvers-3.10.0-514.26.2.el7.x86_64.gz
-rw-r--r--  1 root root   305158 9月  26 23:17 symvers-3.10.0-862.14.4.el7.x86_64.gz
-rw-------. 1 root root  3114352 9月   8 2017 System.map-3.10.0-514.26.2.el7.x86_64
-rw-------  1 root root  3414754 9月  26 23:15 System.map-3.10.0-862.14.4.el7.x86_64
-rwxr-xr-x. 1 root root  5395584 2月   7 2018 vmlinuz-0-rescue-2216fbd88166481a85c5fe5e50457dcc
-rwxr-xr-x. 1 root root  5395584 9月   8 2017 vmlinuz-3.10.0-514.26.2.el7.x86_64
-rwxr-xr-x  1 root root  6398144 9月  26 23:15 vmlinuz-3.10.0-862.14.4.el7.x86_64

第五步:运行init进程
init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。init 程序首先是需要读取配置文件/etc/inittab(定义了系统默认运行级别),根据/etc/inittab设定的动作进行脚本的执行,第一个被执行的脚本为/etc/rc.d/rc.sysinit,执行完后,根据配置的启动级别,执行对应目录底下的脚本,最后执行/etc/rc.d/rc.local这个脚本,至此,系统启动完成。

第六步:init进程执行rc.sysinit
这个是真正的OS初始化脚本,简单讲下这个脚本的任务(可以去看看实际脚本,看看都做了什么):
  1、激活udev和selinux;2、根据/etc/sysctl.conf文件,来设定内核参数;3、设定系统时钟;4、装载硬盘映射;5、启用交换分区;6、设置主机名;7、根文件系统检测,并以读写方式重新挂载根文件系统;8、激活RAID和LVM设备;9、启用磁盘配额;10、根据/etc/fstab,检查并挂载其他文件系统;11、清理过期的锁和PID文件

第七步:init进程执行不同运行级别的脚本程序
其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:

0:-halt  关机

1:-single user mode 单用户模式

2:-Multi-user,without NFS无网络支持的多用户模式  类似于下面的run level3

3:-Full multi-user mode 有网络支持的多用户模式

4:-unused 保留,未使用

5:-X11  有网络支持有X-Window支持的多用户模式

6:- reboot 重新引导系统,即重启

在不同的运行级别下,/etc/rc.d/rc这个脚本会分别执行不同目录下的脚本

Run level 0 – /etc/rc.d/rc0.d/
Run level 1 – /etc/rc.d/rc1.d/
Run level 2 – /etc/rc.d/rc2.d/
Run level 3 – /etc/rc.d/rc3.d/
Run level 4 – /etc/rc.d/rc4.d/
Run level 5 – /etc/rc.d/rc5.d/
Run level 6 – /etc/rc.d/rc6.d/

第八步:init进程执行/etc/rc.d/rc.local
你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don’t
# want to do the full Sys V style init stuff.
rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。

第九步:执行/bin/login程序,启动mingetty,进入登录状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值