LinuxSir.cn,穿越时空的Linuxsir!

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

请教大家3个关于kernel的问题

[复制链接]
发表于 2006-6-29 14:02:29 | 显示全部楼层 |阅读模式
请教大家一下,kernel在启动起来之后要加载相应的module,并根据udev等程序的设置来加载硬件驱动。下一步是启动init进程根据inittab脚本并启动相应的运行级,然后启动bash。但是在lfs安转过程中,是先按装的工具链,并按装系统所需的基本程序以及配置文件,最后一步才是安装的内核,那么内核是通过什么配置文件来定义并控制我们在安装安装kernel之前安装的系统程序和配置文件的?这个文件放在什么地方?
另外BSD或者sys-v的脚本都是kernel之外的模块,其实也可以理解为内核之外的程序,那么kernel是如何识别这些脚本的?
还有就是内核只安装了3个文件,也就是说kernel本身简单来说就是一个程序,那只负责控制硬件,并相应软件的硬件操作请求,其他什么都不做,那么内核本身是不是仅提供内核api的接口,而并没有向其他程序提供库文件,不知道是不是这个样子?
发表于 2006-6-29 15:25:05 | 显示全部楼层
你在安装工具链的时候还没用到即将安装的内核呢,等一切都按照内核要得方式装好了重启才奏效
内核启动时会有参数,告诉他rootfs在哪里,他就会去那里找他要得东西

脚本是通过SHELL解释的,不直接通过内核

内核除了控制硬件还调度进程,管理内存,等
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-29 18:17:10 | 显示全部楼层
Post by 1ball
你在安装工具链的时候还没用到即将安装的内核呢,等一切都按照内核要得方式装好了重启才奏效
内核启动时会有参数,告诉他rootfs在哪里,他就会去那里找他要得东西

脚本是通过SHELL解释的,不直接通过内核

内核除了控制硬件还调度进程,管理内存,等


kernel在启动init进程之后会调用inittab脚本(准确的说法应该是叫配置文件)然后设定启动模式,在这个过程中shell并没有被启动起来。shell是在完成了登陆之后又login进程启动的。

inittab脚本是由kernel的init()程序进行调用的,所以事实上在shell启动之前,系统已经可以执行shell脚本了,下面是具体分析:

在inittab里面里的前两行:
id:3:initdefault:
#表示当前缺省运行级别为3--完全多任务模式;
si::sysinit:/etc/rc.d/rc.sysinit-------->注意这一点,系统会找到/etc/rc.d/rc.sysinit脚本来执行,而这个脚本的第一行是:#!/bin/bash   
所以可以看出来,系统在init进程运行中并且在shell启动之前就已经可以执行shell脚本了

所以这一点很是搞不明白,还希望高手可以帮助分析一下这是怎么回事。
回复 支持 反对

使用道具 举报

发表于 2006-6-29 19:38:02 | 显示全部楼层
inittab不是kernel调用的,是/sbin/init调用的,shell在执行脚本内容的时候也是需要的.
回复 支持 反对

使用道具 举报

发表于 2006-6-30 10:12:30 | 显示全部楼层
Post by cincent

inittab脚本是由kernel的init()程序进行调用的,所以事实上在shell启动之前,系统已经可以执行shell脚本了,下面是具体分析:

在inittab里面里的前两行:
id:3:initdefault:
#表示当前缺省运行级别为3--完全多任务模式;
si::sysinit:/etc/rc.d/rc.sysinit-------->注意这一点,系统会找到/etc/rc.d/rc.sysinit脚本来执行,而这个脚本的第一行是:#!/bin/bash   
所以可以看出来,系统在init进程运行中并且在shell启动之前就已经可以执行shell脚本了

所以这一点很是搞不明白,还希望高手可以帮助分析一下这是怎么回事。

谁说系统启动过程中init不能调用shell解释执行启动脚本?
这个分析实在有点……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-30 10:39:18 | 显示全部楼层
Post by 1ball
谁说系统启动过程中init不能调用shell解释执行启动脚本?
这个分析实在有点……


那么1ball兄,可不可以解释一下系统启动的时候init和shell之间是如何工作的,我看了很多资料都没有说清楚
回复 支持 反对

使用道具 举报

发表于 2006-6-30 11:32:02 | 显示全部楼层
init执行那些脚本阿,可能system(),也有可能是fork后exec
他应该并不直接调用bash,而是执行时发现脚本第一行magic number后系统再execve()调用bash
具体的要看init代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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