Linux启动过程详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux启动过程详解相关的知识,希望对你有一定的参考价值。

一、Linux系统开机启动过程

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

第二步:读取MBR

第三步:Boot Loader grub引导菜单

第四步:加载kernel内核

第五步:init进程依据inittab文件夹来设定运行级别

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

第七步:启动内核模块

第八步:执行不同运行级别的脚本程序

第九步:执行/etc/rc.d/rc.local

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

二、图解开机过程

技术分享图片

三、剖析启动过程

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

    当我们打开计算机电源的时候,随后会听到滴的一声,自检开始,这个过程中主要是检测我们的计算机硬件设备比如:CPU,内存,主板,显卡,CMOS等设备是否有故障存在

 

第二步:读取MBR

BIOS自检,首先会在一个Boot Sequence程序中搜索可以让系统启动的引导设备(比如我们有时在BIOS中设置为从硬盘启动,或者从CD-ROM启动等等)

     这时如果BIOS找不到可以引导的设备及相关程序后,便会启动失败,如果顺序的找到了相关设备硬盘,那么BIOS将把控制权交给启动设备中的MBRMaster Boot Record)主引导记录

MBR在大小为512字节,存放预启动信息、分区表等信息,

 

第三步:Boot Loader grub引导菜单

   在MBR程序中找到其前446字节的Boot Loader 

Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。

Boot Loader有若干种,其中GrubLilospfdisk是常见的Loader。。

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

[[email protected] ~]# cat /etc/grub.conf
# 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/sda3
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --md5 $1$cjB7p0q.$9fauA6mvALyXw96vmy.q41
title CentOS (2.6.18-348.12.1.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-348.12.1.el5 ro root=LABEL=/
        initrd /initrd-2.6.18-348.12.1.el5.img
title CentOS (2.6.18-308.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-308.el5 ro root=LABEL=/
        initrd /initrd-2.6.18-308.el5.img


 

第四步:加载kernel内核

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

 

系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。

 

从全局启动历程start_kernel开始,

    内核完成的任务主要有:

    硬件的特测

    硬件驱动的初始化,

    挂载根文件系统(根切换)

    启动init进程。

    内核在系统启动后的功能先提前介绍一下:

    进程的调度,内存管理,文件系统的管理,硬件驱动,网络等

    内核自身初始化完成后开始下一步

 

第五步:init进程依据inittab文件夹来设定运行级别

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

 

其实/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 重新引导系统,即重启

 

cat /etc/inittab   查看/etc/inittab相关设定

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

在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。如果你有兴趣,可以到/etc/rc.d中查看一下rc.sysinit文件,里面的脚本够你看几天的

 

第七步:启动内核模块

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

 

第八步:执行不同运行级别的脚本程序

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

 

 

第九步:执行/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,进入登录状态

 

 

 

 

 

简述开机系统启动过程

1.开机BIOS自检

2.MBR引导

硬盘0柱面0磁道1扇区的前446byte

3.grub引导菜单

cat /etc/grub.conf

4.加载内核kernel

5.启动init进程

[[email protected] rc.d]# ps -ef|grep init

    root         1     0  0 Oct23 ?        00:00:02 init [3]         

6.读取inittab文件,执行rc.sysinit.rc等脚本

/etc/inittab

/etc/rc.d/rc.sysinit

/etc/rc.d/rc3.d/    <==文本模式

7.启动mingetty.进入系统登陆界面

 


以上是关于Linux启动过程详解的主要内容,如果未能解决你的问题,请参考以下文章

linux启动过程详解

Linux启动过程详解

Linux系统启动过程详解

Linux启动过程详解

Linux启动过程详解

linux开启过程详解