LinuxSir.cn,穿越时空的Linuxsir!

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

忙了差不多10年的工作,今天上来谈谈对于mini-Linux的一些新认识

[复制链接]
发表于 2008-2-7 03:31:39 | 显示全部楼层 |阅读模式
作了差不多10年的嵌入式Linux,移植了很多系统。得到了几个心得,上来和新老朋友交流一下。:flash:

1. Linux其实只用几个文件就可以跑了。就是init(必须), rc, inittab.sh.
(注意,这样Linux其实是在single user模式下,权限相当于root)

2.如果同好们想要更多的功能,就可以添加一些程序来满足自己的需要。
当然,编写rc和inittab需要一定的脚本功底,后面我会逐步归纳inittab和rc脚本的一些技术细节。

咱们看一个范例,下面是我的电脑的Linux,inittab(注意这个inittab的名称是绝对不能更改的)。这个名称是在init.c里面定义的,如果各位同好有兴趣编辑一下init.c里面的这个文件的名称,哈哈,别人就蒙掉了。

# Default runlevel.
id:3:initdefault:

# System initialization, mount local filesystems, etc.
si::sysinit:/sbin/rc sysinit

# Further system initialization, brings up the boot runlevel.
rc::bootwait:/sbin/rc boot

l0:0:wait:/sbin/rc shutdown
l1:S1:wait:/sbin/rc single
l2:2:wait:/sbin/rc nonetwork
l3:3:wait:/sbin/rc default
l4:4:wait:/sbin/rc default
l5:5:wait:/sbin/rc default
l6:6:wait:/sbin/rc reboot
#z6:6:respawn:/sbin/sulogin


大家可以看id:3:initdefault:这个是默认的启动级别,表明了系统将会执行级别3定义的这个脚本。

当然我们很容易可以猜到si::sysinit:/sbin/rc sysinit定义的是系统初始化脚本

这样inittab一下子就很清楚了,系统的启动步骤也很清楚了
1 run kernel
2 init
3 rc
4 level 3

在上面的inittab里面的0,1,2,3,4,5,6就是init程序的运行级别,具体哪个代表什么linuxsir上面应该有很多文章提到了,我就说一下3,4,5就是多用户级别了,但是同好们依然可以改变它们的定义,这个需要修改init.c程序本身了,有兴趣的话可以试试。另外脚本的不同也一样可以改变他们默认的功能。具体的脚本同好们可以看自己的linux系统下面对应的脚本文件。当然有些同好也提到了我们也可以不要init这个程序,不过这个可是linux系统钦定的初始化程序,如果咱们不要的话可是要自己去修改kernel啰,要么就弄一个和init一样名称的什么程序都可以的程序哈哈,不过那样你能会失去一个重要的东西就是控制台,因为你需要自行想办法去定义你的控台,哈哈,没有控制台你什么也做不了。别人都做好了而且功能强大的东西干什么咱们不用呢,而且省掉这个东东也省不了太多的bit数出来,所以咱们还是用稳定而且经典的init程序,况且这个小的init别人已经帮我们写好了。

rc命令脚本程序

我们已经知道,当运行级别发生改变时,将由/etc/inittab文件定义需要运行哪一个命令脚本程序。这些命令脚本程序负责启动或者停止该运行级别特定的各种服务。由于需要管理的服务数量很多,因此需要使用rc命令脚本程序。其中,最主要的一个是/etc/rc.d/rc,它负责为每一个运行级别按照正确的顺序调用相应的命令脚本程序。我们可以想象,这样一个命令脚本程序很容易变得难以控制!为了防止这类事件的发生,需要使用精心设计的方案。


希望大家多多捧场,捧的人多我就多说些。:flash::flash:
发表于 2008-2-7 18:28:13 | 显示全部楼层
楼主 写的详细些啊。。支持
回复 支持 反对

使用道具 举报

发表于 2008-2-7 21:14:55 | 显示全部楼层
10年的嵌入式?
崇拜下。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-8 13:26:39 | 显示全部楼层
慢慢来嘛,一口吃不成一个胖子的。在linux系统中inittab是一个非常重重要的文件,其中设定了初始进入脚本的路径和文件名称,然后就是各个启动模式的初始进入脚本,启动1,2,3,4,5,6和退出1,2,3,4,5,6。

咱们看一个范例,下面是我的电脑的Linux,inittab(注意这个inittab的名称是绝对不能更改的)。这个名称是在init.c里面定义的,如果各位同好有兴趣编辑一下init.c里面的这个文件的名称,哈哈,别人就蒙掉了。

# Default runlevel.
id:3:initdefault:

# System initialization, mount local filesystems, etc.
si::sysinit:/sbin/rc sysinit

# Further system initialization, brings up the boot runlevel.
rc::bootwait:/sbin/rc boot

l0:0:wait:/sbin/rc shutdown
l1:S1:wait:/sbin/rc single
l2:2:wait:/sbin/rc nonetwork
l3:3:wait:/sbin/rc default
l4:4:wait:/sbin/rc default
l5:5:wait:/sbin/rc default
l6:6:wait:/sbin/rc reboot
#z6:6:respawn:/sbin/sulogin


大家可以看id:3:initdefault:这个是默认的启动级别,表明了系统将会执行级别3定义的这个脚本。

当然我们很容易可以猜到si::sysinit:/sbin/rc sysinit定义的是系统初始化脚本

这样inittab一下子就很清楚了,系统的启动步骤也很清楚了
1 run kernel
2 init
3 rc
4 level 3
哈哈,改天接着说
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-8 13:33:06 | 显示全部楼层
哈哈,2楼的和我一样是潜水员啊,linuxsir在我工作之中帮助很大啊,觉得不发点贴确实不好意思了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-8 13:33:52 | 显示全部楼层
大家多多顶。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-8 13:43:09 | 显示全部楼层
写得好斑竹一定要给我加精啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-8 13:55:05 | 显示全部楼层
其实论坛里面很多人都写了相关的东西,我在这里就没有必要重复了,我就主要写一些很重要,但是别人没有写的东西,这些既是Linux的核心技术,同时也是UNIX的核心技术,UNIX之所以成为人类发明计算机以来的最经典的最稳定的操作系统,主要就是UNIX采用了大量的脚本技术,使得大家只要做个简单的应用程序,然后使用脚本来将这些简单的应用程序集成起来成为一个功能强大稳定的系统。
回复 支持 反对

使用道具 举报

发表于 2008-2-8 21:26:11 | 显示全部楼层
加油,有点 LFS 的感觉。。
回复 支持 反对

使用道具 举报

发表于 2008-2-10 00:49:19 | 显示全部楼层
问一个菜菜的问题,为什么楼主说的文件里面没有kernel的那个文件?
回复 支持 反对

使用道具 举报

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

本版积分规则

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