Chinaunix首页 | 论坛 | 博客
  • 博客访问: 319400
  • 博文数量: 33
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1928
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-22 16:27
文章分类

全部博文(33)

文章存档

2015年(33)

分类: LINUX

2015-05-05 00:09:31

先把我的rcS文件贴出来,然后逐行解析:

*****************************************************************************

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel

#
#       Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#

mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
mkdir -p /var/lock

mkdir /dev/fb /dev/v4l
ln -s /dev/fb0 /dev/fb/0
ln -s /dev/video0 /dev/v4l/video0

#ln -s /dev/ts0 /dev/h3600_tsraw

hwclock -s
feed_wdg &

qtopia &

insmod /lib/input-polldev.ko
insmod /lib/mac80211.ko
#TL-WN321G+
insmod /lib/rt2x00lib.ko
insmod /lib/rt2x00usb.ko
insmod /lib/rt73usb.ko
#TL-WN322G+
insmod /lib/zd1211rw.ko

insmod /lib/ov9650.ko

ifconfig lo 127.0.0.1
net_set &

/etc/rc.d/init.d/leds start
/etc/rc.d/init.d/netd start
/etc/rc.d/init.d/httpd start

/bin/hostname -F /etc/sysconfig/HOSTNAME

********************************************

PATH=/sbin:/bin:/usr/sbin:/usr/bin
这个熟悉吧,设置命令的路径

runlevel=S
设置运行级别,由上一篇日志知道,busybox会忽略这个相,所以这个设置在这里不起作用
S代表运行级别1,即single-user(单用户)模式

prevlevel=N
umask 022
不了解这两个是干嘛用的,了解的大神还请告知一下
但是把这两个注释掉也会正常启动,猜想也不会用到

mount -a
挂载文件/etc/fstab中设置的所有设备,这里都是基于内存的虚拟文件系统,用于查看系统信息或优化性能
看一下/etc/fstab的内容:
#device         mount-point     type    options         dump    fsck order
proc            /proc           proc    defaults                0       0
tmpfs           /tmp            tmpfs   defaults                0       0
sysfs           /sys            sysfs   defaults                0       0
tmpfs           /dev            tmpfs   defaults                0       0
var             /dev            tmpfs   defaults                0       0
ramfs           /dev            ramfs   defaults                0       0
挂载虚拟文件系统,mdev -s运行的前提

挂载的设备名没什么意义,有意义的是文件系统类型,因为这些文件系统全部是从内存里挂载,划分一块内存挂载到
文件系统上,设备名只是容易区分是哪种文件类型。虚拟文件系统基本上是提供与内核交互的一种通道。

这些的意思都是把内存挂载到这些文件,我们看到的proc、tmp、dev都是内存挂载的,里面创建的文件重启就
不存在了,用du也查看不到大小

但以tmpfs挂载的/tmp里的文件(新建或拷贝进去),用du可以查看到大小,而且重启之后文件就消失了,不知为何。

从上面可以看出dev下的节点都是启动之后由“mdev -s”创建的,存在于内存中。大部分构建文件系统的教程里都说console
和null节点时必须的,手动创建的,这里可以不需要。原因如下:
系统在启动之后在rcS文件里执行“mdev -s”会创建这两个节点,以后终端操作的节点都是这个时候创建的,原根文件系统里的
节点会被覆盖。但是在执行
“mdev -s”终端将是不可用的。做了一个小实验,如果根文件系统里有console和null节点,在“mdev -s
之前就可以使用echo输出。如果
根文件系统里没有这两个节点,启动时会打印“Warning: unable to open an initial console.”,并且
“mdev -s”之前不可以使用echo输出

之所以打印“Warning: unable to open an initial console.”,是因为:
static noinline int init_post(void)
        __releases(kernel_lock)
    if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
                printk(KERN_WARNING "Warning: unable to open an initial console.\n");


mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
第一条是创建/dev/pts目录,-p的意思是创建多级目录,即如果父亲目录不存在,则创建
第二条/dev/pts也是从内存挂载一个虚拟的文件系统,作用是可以了解目前远程虚拟终端(telnet,ssh等)的基本情况

echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
第一条指定热插拔的处理函数。把“/sbin/mdev”写到/proc/sys/kernel/hotplug,内核会读取里面的内容,当有热插拔
事件时,会调用这个函数。
第二条,自动在/dev下创建设备节点。“mdev -s”会扫描/sys/class/xxx,在目录中查找dev文件
。例如:/sys/class/tty/tty0/dev,它的内容为"4:0"。目录名作为设备名。/sys/class/下的每个文件夹都代表着一个子系统。
然后mdev创建/dev/设备名的设备节点。所以系统启动后你在/dev下看到的设备节点全都来源于这条指令。
至于class里面的文件是怎么生成的,这就涉及到设备模型的内容了,这里不讲。
关于热插拔可参考其他博文。

hwclock -s
设置系统时间,从RTC获取
如果时间不正确,可在系统启动之后用date命令修改系统时间,然后通过“hwclock -w”写入RTC,下次启动就正确了

feed_wdg &
内核配置启动了看门狗,让这个应用程序一直运行来喂狗,不然程序会隔一段时间就重启

qtopia &
后台运行qt程序

insmod /lib/input-polldev.ko
insmod /lib/mac80211.ko
#TL-WN321G+
insmod /lib/rt2x00lib.ko
insmod /lib/rt2x00usb.ko
insmod /lib/rt73usb.ko
#TL-WN322G+
insmod /lib/zd1211rw.ko

insmod /lib/ov9650.ko

手动添加各种驱动模块

ifconfig lo 127.0.0.1
net_set &
配置自环ip和运行网卡设置脚本

/etc/rc.d/init.d/leds start
/etc/rc.d/init.d/netd start
/etc/rc.d/init.d/httpd start
运行初始化用户程序

/bin/hostname -F /etc/sysconfig/HOSTNAME
设置主机名(使用的是HOSTNAME文件里的内容)


阅读(6250) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~