Linux具有极大的灵活性,rcS文件具体要完成什么工作,完全由DIY者决定。以下针对该文件分析,主要目的是搞清楚各条语句的意思。
#! /bin/sh
指定系统使用的shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
runlevel=S
设置系统运行级别为S(single user mode),即单用户模式,只有一个控制台终端,供“root”帐号做系统维护。
umask 022
我们知道,文件有权限的规定,那么当你新建一个文件或文件夹,它们的权限默认怎么设定呢?
export PATH runlevel prevlevel
export用于传递一个或多个变量的值到其他shell,相当于声明了一些“全局变量”
trap ":" INT QUIT TSTP
捕捉INT、QUIT、TSTP信号
/bin/hostname bname
设置机器名字bname
/bin/mount -n -t proc none /proc
/bin/mount -n -t sysfs none /sys
/bin/mount -n -t usbfs none /proc/bus/usb
/bin/mount -t ramfs none /dev
挂载文件系统,-t指明文件系统的类型,-n只是单纯的mount,而不会去写/etc/mtab文件。否则,如果/etc在一个只读的文件系统上,写的话将引发错误。
echo /sbin/mdev > /proc/sys/kernel/hotplug
调用mdev管理程序动态的创建插拔设备。kernel在每次设备出现变动时调用上面一句传递进去的用户空间应用程序/sbin/mdev来处理对应的信息,进而mdev操作/dev目录下的设备,进行添加或删除。
/sbin/mdev -s
有了这一句,内核就可以在/dev目录下自动创建设备节点。
/bin/hotplug
设置内核的hotplug handler为mdev,由mdev接受来自内核的消息并作出相应的回应,比如挂载U盘等。
# mounting file system specified in /etc/fstab
mkdir -p /dev/pts
mkdir -p /dev/shm
/bin/mount -n -t devpts none /dev/pts -o mode=0622
/bin/mount -n -t tmpfs tmpfs /dev/shm
/bin/mount -n -t ramfs none /tmp
/bin/mount -n -t ramfs none /var
创建然后指定的文件夹下挂载文件系统
/sbin/hwclock -s -f /dev/rtc
从硬件RTC取得时间
syslogd
记录系统或应用程序产生的各种信息,并把信息写到日志中
echo V >/dev/watchdog
关闭看门狗
insmod /lib/modules/s3c2416_gpio.ko
加载驱动程序
dmesg -n 1
显示开机信息,信息在内核的ring buffer中。
exec /usr/etc/rc.local
转去执行rc.local文件中内容
一个完整rcS文件如下:
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
trap ":" INT QUIT TSTP
/bin/hostname bname
/bin/mount -n -t proc none /proc
/bin/mount -n -t sysfs none /sys
/bin/mount -n -t usbfs none /proc/bus/usb
/bin/mount -t ramfs none /dev
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
/bin/hotplug
# mounting file system specified in /etc/fstab
mkdir -p /dev/pts
mkdir -p /dev/shm
/bin/mount -n -t devpts none /dev/pts -o mode=0622
/bin/mount -n -t tmpfs tmpfs /dev/shm
/bin/mount -n -t ramfs none /tmp
/bin/mount -n -t ramfs none /var
mkdir -p /var/empty
mkdir -p /var/log
mkdir -p /var/lock
mkdir -p /var/run
mkdir -p /var/tmp
/sbin/hwclock -s -f /dev/rtc
syslogd
/etc/rc.d/init.d/netd start
echo " " > /dev/tty1
echo "Starting networking..." > /dev/tty1
mkdir /mnt/disk
mount -t yaffs2 /dev/mtdblock3 /mnt/disk
echo V >/dev/watchdog
/sbin/ifconfig lo 127.0.0.1
insmod /lib/modules/s3c2416_gpio.ko
/bin/sleep 2
dmesg -n 1
exec /usr/etc/rc.local