Linux启动过程解析
2013-06-11 22:07
211 查看
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中,所有条目采取以下格式:
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指定的命令中止,便重新运行该命令。
设置当前系统运行级别,修改当前系统级别init [0,1,2,3,4,5,6,S,s]或者telinit [0,1,2,3,4,5,6,S,s]。
启动脚本/etc/rc.d/rc.sysinit完成系统服务程序启动,如系统环境变量、设置系统时钟、加载字体、检查加载文件系统、生成系统启动信息日志文件等。
根据当前运行级别调用/etc/rc.d/rc脚本,执行相应运行级别目录中的服务程序,完成相应运行级别的初始化设置。
/etc/rc.d/init.d目录下包含各个运行级别的服务程序脚本。
/etc/rc.d/rc[0123456].d目录下分别存放对应运行级别的服务程序脚本的符号链接,链接到init.d目录中相对应的脚本。
第一步:开机加电后固件先进行自检,自检设备信息通过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目录中相对应的脚本。
相关文章推荐
- 基于linux2.6.38.8内核启动过程完全解析[一]
- Linux 启动过程 原理解析
- linux启动过程解析
- Linux启动加载过程解析
- ARM linux解析之压缩内核zImage的启动过程 一
- Linux的启动过程 解析
- ARM linux解析之压缩内核zImage的启动过程 二
- ARM linux解析之压缩内核zImage的启动过程
- linux启动第一个应用程序init && init启动android过程解析 && init.rc与inittab的关系 && android property和linux 环境变量
- Linux】启动过程与启动目录解析
- 转载Linux启动过程详解
- 解析STM32启动过程
- Linux应用程序访问字符设备驱动详细过程解析
- Linux启动过程详解
- Linux入职基础-4.8_系统启动过程(1):BIOS加电自检
- Android启动过程深入解析
- Linux内核分析实验3——分析linux内核启动过程
- linux 启动过程
- ARM Linux启动过程分析