微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MINI2440启动配置文件/etc/init.d/rcS文件分析

MINI2440启动配置文件/etc/init.d/rcS文件分析

时间:11-10 来源:互联网 点击:
串口设备名称的习惯。
同样的,/dev/sdcard和/dev/udisk永远分别指向SD卡和U盘的第一个分区。(所以,用那些没有分区表的SD卡或U盘的兄弟知道原因了吧...)
5. 挂载一些其它的常用文件系统
# 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目录下(同样是ramfs,可写的)新建必要的目录。
6. 设定系统时间
/sbin/hwclock -s
从硬件RTC中获取,不过似乎有问题接下来就是启动系统服务了,包括log记录,网络, http server和自定义的"跑马灯服务"...

# misc devices
mmcblk0p1 0:0 0600 =sdcard */bin/hotplug
sda1 0:0 0600 =udisk * /bin/hotplug
这两句配置的意思是当SD卡或者U盘插入/拔出时,将这个消息传递给自定义的热插拔handler, /bin/hotplug.
这个程序是友善之臂开发的用于自动挂载可移动设备的,目前是SD卡和U盘。它的逻辑很简单,将SD卡或者U盘的第一个分区作为FAT/FAT32挂载到/sdcard或者/udisk。
但这也同时带来一个问题,当SD卡或者U盘上没有分区表或者第一个分区不是FAT/FAT32格式的时候,它就玩不转了,兄弟们要小心了:)
7. 启动一系列服务:
Syslogd
/etc/rc.d/init.d/netd start
echo " " > /dev/tty1
echo "Starting networking..." > /dev/tty1
sleep 1
/etc/rc.d/init.d/httpd start
echo " " > /dev/tty1
echo "Starting web server..." > /dev/tty1
sleep 1
/etc/rc.d/init.d/leds start
echo " " > /dev/tty1
echo "Starting leds service..." > /dev/tty1
echo " "
sleep 1
nsyslog - 用于记录内核和应用程序debug信息
nnetd - inetd, 一个挂载启动各种网络相关服务的看守进程
nhttpd - http server看守进程
nleds- 跑马灯看守进程
其中,inetd的配置文件为/etc/inetd.conf,这是文件内容:

# /etc/inetd.conf: see inetd(8) for further informations.
echo stream tcp nowait root internal
echo dgram udp wait root internal
daytime stream tcp nowait root internal
daytime dgram udp wait root internal
time stream tcp nowait root internal
time dgram udp wait root internal

# These are standard services.
#
ftp stream tcp nowait root /usr/sbin/ftpd /usr/sbin/ftpd
telnet stream tcp nowait root /usr/sbin/telnetd /usr/sbin/telnetd -i
可以看到,这里启动的网络服务有两个:
1)ftp server 和
2)telnet server。
有关网络服务的端口和协议等具体信息,可以参考/etc/services, /etc/protocol。
8. 配置网络设备(网卡)
/sbin/ifconfig lo 127.0.0.1/etc/init.d/ifconfig-eth0:
1)设定本机回环地址为127.0.0.1
2)运行网卡设置脚本/etc/init.d/ifconfig-eth0
这是/etc/init.d/ifconfig-eth0的内容, 加入了我的一些注释
#!/bin/sh
echo -n Try to bring eth0 interface up......>/dev/ttySAC0
#判断/etc/eth0-setting文件是否存在
if [ -f /etc/eth0-setting ] ; then
#读取配置文件信息
source /etc/eth0-setting
#如果根文件系统为nfs,则说明网卡已经配置OK,这里什么都不需要配置了
if grep -q "^/dev/root / nfs " /etc/mtab ; then echo -n NFS root ... > /dev/ttySAC0
#否则,根据配置文件中的MAC, IP, Mask和Gateway通过ifconfig命令相应地配置网卡
else
ifconfig eth0 down
ifconfig eth0 hw ether $MAC
ifconfig eth0 $IP netmask $Mask up
route add default gw $Gateway fi
#将配置文件中的DNS设置写入/etc/resolv.conf使之生效
echo nameserver $DNS > /etc/resolv.conf
#配置文件不存在,使用默认配置else
#如果根文件系统为nfs,则说明网卡已经配置OK,这里什么都不需要配置了
if grep -q "^/dev/root / nfs " /etc/mtab ; then
echo -n NFS root ... > /dev/ttySAC0
else
#将网卡的IP地址设定为192.168.1.230
/sbin/ifconfig eth0 192.168.1.230 netmask 255.255.255.0 up
fi
fi
echo Done > /dev/ttySAC0
可以看到,NFS自动识别就是靠判断/etc/mtab中是否有nfs的挂载记录实现的。
这是root qtopia文件系统中/etc/eth0-settings文件:
IP=192.168.1.230
Mask=255.255.255.0
Gateway=192.168.1.1
DNS=192.168.1.1
MAC=08:90:90:90:90:90
终于到最后了,启动Qtopia GUI环境
/bin/qtopia &
echo " " > /dev/tty1
echo "Starting Qtopia, please waiting..." > /dev/tty1
可以看到,这里Qtopia是通过运行/bin/qtopia来启动的。事实上,/bin/qtopia也是一个脚本,它的任务是设定Qtopia运行必要的环境, 最后通过调用qpe可执行文件真正启动Qtopia。这是它的全部内容,我加入了一些注释:

#!/bin/sh

export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONFFILE=/usr/local/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/local/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export QTDIR=/opt/Qtopia
export QPEDIR=/opt/Qtopia
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH

TS_INFO_FILE=/sys/devices/vi

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top