Linux下的rcS文件的一些分析
(2016-05-12 16:22:41)由于init=/linuxrc, 因此,在文件系统挂载后,运行的第一个程序就是根目录下的linuxrc,而这是一个指向/bin/busybox的链接,因此,系统起来后运行的第一个程序就是busybox本身。
/etc/init.d/rcS:开机自解析文件,内容如下:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
runlevel=S
prevlevel=N
umask022
exportPATH runlevel prevlevel
##为启动环境设置必要的环境变量;
#
#
#
trap":" INT QUIT TSTP
/bin/hostnameFriendlyARM
##设置机器名字
/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
##挂载“虚拟”文件系统“/proc”和“sys”, 并且在/dev目录下挂载一个ramfs,##相当于把原本nandflash上的只读的/dev目录“覆盖上一块可写的空的SDRAM。
##这里要注意的是,/sys和挂载了ramfs的/dev是正确创建设备节点的关键。
##对于2.6.29内核来说,已经没有devfs的支持,创建设备节点只有通过两
##种办法由文件系统来完成:
##1)制作文件系统镜像前用mknod手动创建好系统所有的(包括可能有的)设备节点,并把这些节点文件一起做进文件系统镜像中;
##2)在文件系统初始化过程中,通过/sys目录所输出的信息,在/dev目录下动态的创建系统中当前实际由的设备节点。
注意:在文件系统初始化运行到这里之前,原来的/dev目录下必须有一个设备节点:/dev/console
echo/sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev-s
/bin/hotplug
##这几个就是用来完成上面所说的俩个东西:
##1)通过mdev –s在/dev目录下创建必要的设备节点;
##2)设置内核的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
mkdir-p /var/empty
mkdir-p /var/log
mkdir-p /var/lock
mkdir-p /var/run
mkdir-p /var/tmp
##用来挂载其他一些常用的文件系统。并在/var目录下新建必要的目录
/sbin/hwclock–s
##用来设定系统时间的,从硬件RTC中获取,要获取正确的时间,必须先设置好正确的时间。
##下面的是启动系统服务,包括log记录,网络,http server, web服务和自定义的led服务等。
Syslogd
/etc/rc.d/init.d/netdstart
echo"
echo"Starting networking..." > /dev/tty1
sleep1
/etc/rc.d/init.d/httpdstart
echo"
echo"Starting web server..." > /dev/tty1
sleep1
/etc/rc.d/init.d/ledsstart
echo"
echo"Starting leds service..." > /dev/tty1
echo"
sleep1
/sbin/ifconfiglo
127.0.0.1
/etc/init.d/ifconfig-eth0
/bin/sydz_qt_4.6.3&
echo"
echo"Starting Qtopia, please waiting..." > /dev/tty1
syslog- 用于记录内核和应用程序debug信息
netd– inetd, 一个挂载启动各种网络相关服务的看守进程
httpd– http server看守进程
leds– 跑马灯看守进程
自定义启动的应用程序脚本如下:
#!/bin/sh
./bin/ts-device
export TSLIB_PLUGINDIR=/usr/local/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export LD_LIBRARY_PATH=/usr/local/lib
export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/usr/local/bin
##设置必要的环境变量。包括touchscreen设备文件,tslib配置文件,tslib plug-in位置和touchscreen校准数据文件。
##以下17行有待解析
export QWS_DISPLAY=:1
TS_INFO_FILE=/sys/devices/virtual/input/input0/uevent
if[ -e $TS_INFO_FILE -a "/bin/grep -q TouchScreen < $TS_INFO_FILE"]; then
else
fi
unsetTS_INFO_FILE
export QWS_KEYBOARD=TTY:/dev/tty1
export HOME=/root
##运行我们自定义的应用程序
/udisk/user_define_app –qws
##用于支持热插拔,处理内核产生的hotplug事件。
hotplug