加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

linux系统启动过程手记

(2007-01-08 22:24:15)
分类: 技术文章
 本手记以Fedora Core 4和i386平台为例,剖析了从用户打开电源直到屏幕出现命令行提示符的整个Linux启动过程。
一.启动过程概述。
》当用户打开PC的电源,BIOS开机自检,按BIOS中设置的启动设备(通常是硬盘)启动,读取硬盘MBR中的启动引导器程序,并进行加载。
》启动引导器程序负责引导硬盘中的操作系统,并根据用户的选择引导相应的操作系统启动,对于linux操作系统,启动引导器直接加载linux内核程序。
》linux内核进行硬件的初始化操作,并在屏幕上显示相应的信息,完成后,进一步加载init进程。
》INIT进程是linux系统中运行的第一个进程,根据配置文件的设置/etc/inittab,该进程调用了rc.sysinit和rc等程序,rc.sysinit和rc当完成系统初始化和运行服务的任务后,返回init。
》启动过程的最后运行/dev/mingetty,提示并允许用户输入帐号和口令进行登陆,用户登录成功后进入了Shell,这样就完成了从开机到登录的整个启动过程。
启动过程的图示看下面的图片。
二.INIT进程。
1.INIT进程是linux内核引导运行的,是系统中运行的第一个进程,是所有进程的父进程,其PID永远为1。
如下所示:
[linux-fox@FC4 ~]$ ps -ef|head
UID        PID  PPID  C STIME TTY          TIME CMD
root              0 17:04 ?        00:00:01 init [5]
root              0 17:04 ?        00:00:00 [ksoftirqd/0]
root              0 17:04 ?        00:00:00 [watchdog/0]
root              0 17:04 ?        00:00:00 [events/0]
root              0 17:04 ?        00:00:00 [khelper]
root              0 17:04 ?        00:00:00 [kthread]
root              0 17:04 ?        00:00:00 [kacpid]
root        85      0 17:04 ?        00:00:00 [kblockd/0]
root       134      0 17:04 ?        00:00:00 [pdflush]
2.INIT进程的配置文件:
INIT进程的配置文件路径为:/etc/inittab,内容如下所示:
[linux-fox@FC4 ~]$ more /etc/inittab
#
# inittab       This file describes how the INIT process should set up
             the system in a certain run-level.
#
# Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
             Modified for RHS Linux by Marc Ewing and Donnie Barnes
#

# Default runlevel. The runlevels used by 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 have networking)
 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 has failed, assume we have a few minutes
# of power left.  Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd 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 the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"


# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# Run xdm in runlevel 5
x:5:once:/etc/X11/prefdm -nodaemon

INIT配置文件的格式如下:
id:runlevels:action:process
》id用于标识一个字段。
》runlevels指定该记录的运行级别。
# Default runlevel. The runlevels used by RHS are:
 0 - halt (Do NOT set initdefault to this)        //关机,不要设置initdefault为0
 1 - Single user mode                          //单用户模式,主要用于系统维护
 2 - Multiuser, without NFS (The same as 3, if you do not have networking)   //不带NFS的多用户模式
 3 - Full multiuser mode              //完全多用户模式
 4 - unused                //未分配使用
 5 - X11                  //图形登录的多用户模式
 6 - reboot (Do NOT set initdefault to this)       //重启系统,不要把initdefault设置为6

》actin描述记录讲执行哪种类型的动作:
关键字                              说明
initdefault             指定系统启动后进入的运行级别
sysinit                 sysinit在任何boot或bootwait类进程之前运行
wait                    在进程指定运行级别后运行一次,init进程讲等待其结束
ctrlaltdel              设置三键组合时系统所进行的操作
powerfail和powerokwait  用于UPS电源断电和恢复供电时的操作
respawn                 该类进程在结束后重新启动运行
》process字段设置的是启动进程所执行的命令。

3.系统初始化脚本:
/etc/rc.d/rc.sysinit

4.服务脚本:
INIT进程根据其配置文件在/etc/rc.d/rcN中进入相应的运行级别执行相应的服务脚本。以运行级别5为例将执行/etc/rc.d/rc5.d/中的服务脚本:
[linux-fox@FC4 ~]$ cd /etc/rc.d/rc5.d/
[linux-fox@FC4 rc5.d]$
[linux-fox@FC4 rc5.d]$ ls
K01yum                       K10psacct     K35smb         K71lirc       K89netplugd   S08iptables   S26apmd           S90xfs
K02cups-config-daemon        K12dc_client  K35vncserver   K73ypbind     K89rdisc      S10network    S28autofs         S95anacron
K02NetworkManager            K15httpd      K35winbind     K74nscd       K90bluetooth  S12syslog     S33nifd           S95atd
K02NetworkManagerDispatcher  K20nfs        K36mysqld      K74ntpd       K91isdn       S14nfslock    S34mDNSResponder  S97messagebus
K03rhnsd                     K24irda       K50netdump     K85mdmonitor  K94diskdump   S18auditd     S44acpid          S98haldaemon
K05saslauthd                 K25squid      K50tux         K85mdmpd      K95kudzu      S18rpcidmapd  S85gpm            S99local
K10cups                      K25sshd       K50vsftpd      K87portmap    K96pcmcia     S19rpcgssd    S87iiim
K10dc_server                 K30sendmail   K69rpcsvcgssd  K89named      S06cpuspeed   S25netfs      S90crond
5.控制台登录:
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
linux系统默认启动6个虚拟控制台。
用户输入用户帐号后,将通过nologin、passwd、shadow等进行验证,最后登录到shell。

                                                                                                             ------linux-fox
                                                                                                                 2006/06/22

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有