|
|
发表于 2005-2-18 00:34:35
|
显示全部楼层
以前,因为自已从来不关心这个问题,都是先装好基本系统后再在console下手工安装X的,所以对这个runlevel的问题也没有关注过。
为了给楼主一个完整的答案,我又分析了一下debian的启动过程。下面是我的分析
-----------
系统:sarge
总流程:开机-->BIOS-->MBR-->Boot loader-->Kernel-->init-->各种守护进程
其中我们要讨论的是init进程所做的事情
/etc/inittab
# The default runlevel.
id:2:initdefault: <---- 这句是用来设置缺省的runlevel,2 表示multiuser
# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS <---- 用于系统初始化,执行/etc/rcS.d 目录中的各脚本的符号连接
该句语分为四个部分:
第一部分为1到4个字符长度的id --- si:
第二部分为runlevel(运行级别)
第三部分为在这个runlevel下将要执行的操作描述 ---- sysinit (该操作描述为一个枚举值,并不能由用户随意填写,具体枚举值可以参阅man inittab)
第四部分为实际执行操作的脚本 -- /etc/init.d/rcS
rcS 脚本内容分析:
1 设置一些通用环境变量
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
2 如果是安装完后的第一次启动,则运行stage2配置程序
if [ -x /sbin/unconfigured.sh ]
then
/sbin/unconfigured.sh
fi
3 为执行启动配置脚本前预设部分环境变量
. /etc/default/rcS
export VERBOSE
4 为一个for 循环语句,执行/etc/rcS.d/中的所有S符号链接文件
在/etc/rcS.d/目录中的S符号链接文件。其中主要为挂载文件系统、设置硬盘参数、启动各种模块、网卡设置和配置xfree86的socket 目录。并不存在,也不应该存在有对 X的直接启动脚本文件。
5 运行/etc/rc.boot (这是为了兼容性,一般是用不到的)
~~:S:wait:/sbin/sulogin <--- 若是以单用户方式登入(linux single ),则以wait模式执行sulogin登入程序
以下就是楼主所说问题所在的重点,执行在不同的runlevel引导时的启动脚本
l0:0:wait:/etc/init.d/rc 0 运行级别0:关机
l1:1:wait:/etc/init.d/rc 1 运行级别1:单用户
l2:2:wait:/etc/init.d/rc 2 运行级别2-5:多用户环境,其中runlevel 5通常为具有网络功能的多用户X环境。与debian相比较,redhat的运行级别设置为:2 不带网络功能的多用户环境;3是带网络功能的多用户环境;4通常保留;5 与debian相同。所以debian的runlevel 2 其实等同于redhat 的runlevel 3
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6 运行级别6:重启
随后的一些部分是配置电源失效,三键大法的操作和在启动getty进程,因为与楼主的问题关系不大,暂且略过。
经过以上的分析,我们可以看到,如果要在启动时,能直接进入X,并运行各种X-Display-Manager,则至少要在/etc/rc$runlevel.d/目录中加入对/etc/init.d/[xdm|gdm|kdm]的S符号链接。
在我的系统里,rc2.d下面并没有该S符号链接,事实上在安装的时候就没有存在过,所以我不清楚大家当时在安装sarge时是怎么会在rc2.d/下面产生对X-display-manager的S符号链接文件的。
而在的我的rc5.d下面存在有一个指向/etc/init.d/gdm的S99gdm符号链接文件。所以我如果把runlevel改成5就能直接启动gdm。
以上对debian boot的分析并不完整,也可能会存在错误,如有错请各位指出。 |
|