Linux启动过程解析

Linux启动流程:


第一步:开机加电后固件先进行自检,自检设备信息通过BIOS可以查看包括CPU、硬盘等信息,如果新增设备在BIOS中没有显示,则该设备在系统启动后无法使用。常用的固件设置包括:安全设置、设备启动顺序、电源管理等。


第二步:读取硬盘MBR区域中的自举程序。MBR(Master Boot Record)即硬盘的主引导区域,MBR包括引导程序、分区表和分割标示(Magic Number),MBR总共512个字节,主引导程序占446个字节,分区表占64个字节,分割标示(Magic Number)占2个字节。



Linux的自举程序GRUB的配置文件存放在/boot/grub/grub.conf,配置文件的内容如下图,其中红色部分表示当前引导程序将载入的内核为vmlinuz-2.6.9-78.ELsmp。

 

第三步:引导程序GRUB载入Linux内核,内核通常放在/boot目录下,内核的源码通常放在/usr/src目录下,linux内核版本号中第二个数字如果为偶数则表示该版本为稳定版本,如果为奇数表示该版本为测试版。内核中大部分为驱动程序。

 

第四步:启动init的进程, init进程启动后读取inittab文件(/etc/inittab),执行缺省运行级别,从而继续引导过程。init进程的PID始终未1,PPID始终为0。PID为0的是内核调度器(Kernel scheduler)。


inittab文件剖析

inittab文件如下:

[root@localhost etc]# cat inittab
#
# inittab       This file describes how the INIT processshould set up
#               the system in a certainrun-level.
#
# Author:       Miquel van Smoorenburg,<miquels@drinkel.nl.mugnet.org>
#               Modified for RHS Linux by MarcEwing and Donnie Barnes
#
# Default runlevel. The runlevels usedby RHS are:
#  0 - halt (Do NOT set initdefault to this)
#  1 - Single user mode
#  2 - Multiuser, without NFS (The same as 3, if you do not havenetworking)
#  3 - Full multiuser mode
#  4 - unused
#  5 - X11
#  6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
 
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
 
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
 
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown-t3 -r now
 
# When our UPS tells us power hasfailed, assume we have a few minutes
# of power left.  Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you havepowerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown-f -h +2 "Power Failure; System Shutting Down"
 
# If power was restored before theshutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown-c "Power Restored; Shutdown Cancelled"
 
 
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingettytty1
2:2345:respawn:/sbin/mingettytty2
3:2345:respawn:/sbin/mingettytty3
4:2345:respawn:/sbin/mingettytty4
5:2345:respawn:/sbin/mingettytty5
6:2345:respawn:/sbin/mingettytty6
 
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm-nodaemon
[root@localhost etc]#

在inittab中,所有条目采取以下格式:

id:run-levels:action:process

id:标示符,一般为两位字母或数字。没有实际意义。

run-levels:指定允许级别,可以指定多个运行级别。

action:指定运行状态。

process:指定要运行的脚步或命令。

 

action常用取值:

initdefault: 指定系统缺省的运行级别。

sysinit:系统启动执行process中指定的命令。

wait:执行process中指定的命令,并等待其结束再运行其他命令。

once:执行process中指定的命令,但不等待其结束。

ctrlaltdel:按下Ctrl+Alt+Del时执行process中指定的命令。

powerfail:当出现电源错误时执行process指定的命令,不等待其结束。

powerokwait:当电源恢复时执行process指定的命令。

respawn:一旦process指定的命令中止,便重新运行该命令。

 

id:5:initdefault:

设置当前系统运行级别,修改当前系统级别init [0,1,2,3,4,5,6,S,s]或者telinit [0,1,2,3,4,5,6,S,s]。

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

启动脚本/etc/rc.d/rc.sysinit完成系统服务程序启动,如系统环境变量、设置系统时钟、加载字体、检查加载文件系统、生成系统启动信息日志文件等。

 

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

根据当前运行级别调用/etc/rc.d/rc脚本,执行相应运行级别目录中的服务程序,完成相应运行级别的初始化设置。

/etc/rc.d/init.d目录下包含各个运行级别的服务程序脚本。

/etc/rc.d/rc[0123456].d目录下分别存放对应运行级别的服务程序脚本的符号链接,链接到init.d目录中相对应的脚本。


 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值