LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1001|回复: 12

请教一个问题--有关lfs启动过程

[复制链接]
发表于 2004-12-5 10:50:05 | 显示全部楼层 |阅读模式
我在/etc/rc.d中,没有找到rc.sysinit,那只有那些目录,
我想知道lfs启动的时候,最先是运行那个脚本的呢》??
也就是说由那个脚本去控制运行对应的runlevel里的每个服务的??
发表于 2004-12-5 11:07:43 | 显示全部楼层
系统启动到运行用户态初始化进程/sbin/init时,init程序会读取/etc/inittab文件,这个文件里面的东西会决定具体执行的脚本,你可以查看一下。
 楼主| 发表于 2004-12-5 12:37:53 | 显示全部楼层
id:5:initdefault:

si::sysinit:/etc/rc.d/init.d/rc sysinit

l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc
意思 就是说先执行/etc/rc.d/rc sysinit里的的,然后再根据
runlevel,来执行相应 的目录里的的脚本??

还是不太明白。因为在其它的系统中,都有相应的脚本来识/etc/rc.d/rcx.d/里面的S 还是K
而lfs是如何实现 的??
 楼主| 发表于 2004-12-5 12:59:33 | 显示全部楼层
在lfs文档里面有这么一句:
rc---is the master run-level control script. It is responsible for running all the other scripts one-by-one, in a sequence determined by the name of the symbolic links being processed.
 楼主| 发表于 2004-12-5 13:07:52 | 显示全部楼层
找到了,原来人家放在/etc/rc.d/rc.sysinit被它放到/etc/rc.d/init.d/rc了
发表于 2004-12-5 13:42:08 | 显示全部楼层
2个是不同的脚本哦。。呵呵。。。:)。。。

rc.sysinit是系统刚启动的时候运行的脚本。

rc已经是进入runlevel了。。。
 楼主| 发表于 2004-12-5 14:11:15 | 显示全部楼层
那lfs有没有类似于rc.sysinit的脚本呢??
请教版主
发表于 2004-12-5 19:55:03 | 显示全部楼层
id:5:initdefault:

si::sysinit:/etc/rc.d/init.d/rc sysinit

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

inittab的格式是:
id:runlevel:action:process  参数
当action是boot,bootwait,sysinit 的时候,runlevel可以省略;
当action是initdefault时process省略;

因此根据你上面的inittab,你的系统启动时候的缺省执行级( runlevle)是5,表示X图形登陆方式;
接着执行/etc/rc.d/init.d/rc (sysinit是rc的参数)的脚本,然后根据前面指定的执行级5,再次执行/etc/rc.d/init.d/rc脚本,把5当作命令行参数,执行/etc/rc.d/rc5.d下面的脚本,rc返回后,init启动mingtty显示登陆界面以及提示,将用户输入当作login的参数,加载login程序(此处在tty处会有定义的process)。
附linux-2.4.18中main.c 内的init()内核线程最后几句:
        ......................
        if (execute_command)
                execve(execute_command,argv_init,envp_init);
        execve("/sbin/init",argv_init,envp_init);
        execve("/etc/init",argv_init,envp_init);
        execve("/bin/init",argv_init,envp_init);
        execve("/bin/sh",argv_init,envp_init);
        panic("No init found.  Try passing init= option to kernel.");
        .......
系统启动到运行用户态初始化进程/sbin/init时,init程序就会读取/etc/inittab文件。
脚本/etc/rc.d/init.d/rc就是主run level控制脚本,也就是最先运行的脚本,传递sysinit给它的时候,它会start 脚本/etc/rc.d/rcsysinit.d中的 service,做一些激活交换分区,检查fs等工作,然后进入指定的run level的脚本执行。
lfs的启动脚本入口都是/etc/rc.d/init.d/rc,然后根据传递的参数再选择对应的/etc/rc.d/下面的脚本执行。
呵呵,说的有点乱,凑合看吧
 楼主| 发表于 2004-12-5 21:51:25 | 显示全部楼层
精彩:)  让我学习很多
谢谢threeseconds
发表于 2004-12-6 09:10:32 | 显示全部楼层
不客气:)
大家一起good good study,day day up
呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表