天嵌 ARM开发社区

 找回密码
 注册
查看: 2282|回复: 0

rcS内容分析(2)转

[复制链接]
a1154870074 发表于 2015-5-4 10:24:32 | 显示全部楼层 |阅读模式
/etc/init.d/rcS内容分析(2)
2010年08月20日 10:13
1.#mounting file system specified in /etc/fstab
2.mkdir -p /dev/pts
3.mkdir -p /dev/shm
4./bin/mount -n -t devpts none /dev/pts -o mode=0622
5.     /bin/mount -n -t tmpfs tmpfs /dev/shm   
6.     /bin/mount -n -t ramfs none /tmp   
7.     /bin/mount -n -t ramfs none /var
8.mkdir -p /var/empty
9.mkdir -p /var/log
10.mkdir -p/var/lock
11.mkdir -p/var/run
12.mkdir -p /var/tmp
就像注释中所说的,这是用来挂载其他一些常用的文件系统,并在/var 目录下(同样是
ramfs,可写的)新建必要的目录。
1.     /sbin/hwclock -s

用来设定系统时间的,从硬件 RTC 中获取,要获取正确的时间,必须先设置好正确的
时间(如何设置 RTC 见用户手册说明),目前友善之臂的开发板出厂时并没有设置实际的时
间,而是系统默认的。
接下来就是启动系统服务了,包括log记录,网络, http server和自定义的"跑马灯服
务"...
1.     syslogd   
2.     /etc/rc.d/init.d/netd start   
3.     echo "                        " > /dev/tty1                                                                                                      4.     echo "Starting networking..." > /dev/tty1   
5.     sleep 1   
6.     /etc/rc.d/init.d/httpd start   
7.     echo "                        " > /dev/tty1   
8.     echo "Starting web server..." > /dev/tty1   
9.     sleep 1   
10.   /etc/rc.d/init.d/leds start   
11.   echo "                        " > /dev/tty1   
12.   echo "Starting leds service..." > /dev/tty1   
13.   echo "                        "   
14.   sleep 1
启动一系列服务:
syslog - 用于记录内核和应用程序 debug 信息
netd -      inetd, 一个挂载启动各种网络相关服务的看守进程
httpd -    http server看守进程
leds -   跑马灯看守进程
其中,inetd的配置文件为/etc/inetd.conf,这是文件内容
1.     # /etc/inetd.conf: see inetd(8) for further informations.   
2.     echo      stream tcp    nowait    root    internal   
3.     echo      dgram    udp    wait    root    internal   

4.     daytime stream tcp    nowait    root    internal   
5.     daytime dgram    udp    wait    root    internal   
6.     time      stream tcp    nowait    root    internal   
7.     time      dgram    udp    wait    root    internal   
8.      
9.     # These are standard services.   
10. #
11.   ftp    stream    tcp    nowait    root    /usr/sbin/ftpd        /usr/sbin/ftpd   
12.   telnet    stream    tcp    nowait    root    /usr/sbin/telnetd    /usr/sbin/telnetd -i
可以看到,这里启动的网络服务有两个: 1)ftp server 和 2)telnet server。有关网络
服务的端口和协议等具体信息,可以参考/etc/services, /etc/protocols
1.     /sbin/ifconfig lo 127.0.0.1   
2.     /etc/init.d/ifconfig-eth0
配置网络设备(网卡):
1)设定本机回环地址为 127.0.0.1
2)运行网卡设置脚本/etc/init.d/ifconfig-eth0
这是/etc/init.d/ifconfig-eth0的内容, 加入了我的一些注释
复制代码
1.     #!/bin/sh   

2.      
3.     echo -n Try to bring eth0 interface up......>/dev/ttySAC0   
4.      
5.     #判断/etc/eth0-setting文件是否存在
6.     if [ -f /etc/eth0-setting ] ; then   
7.                           #读取配置文件信息
8.         source /etc/eth0-setting   
9.      
10.                         #如果根文件系统为nfs,则说明网卡已经配置OK,这里什么都不需要配置了
11.       if grep -q "^/dev/root / nfs " /etc/mtab ; then   
12.           echo -n NFS root ... > /dev/ttySAC0   
13.                         #否则,根据配置文件中的MAC, IP, Mask和Gateway通过ifconfig 命令相应地配置网卡
14.       else   
15.           ifconfig eth0 down   
16.           ifconfig eth0 hw ether $MAC   
17.           ifconfig eth0 $IP netmask $Mask up   
18.           route add default gw $Gateway   
19.       fi   
20.     
21.                         #将配置文件中的DNS设置写入/etc/resolv.conf 使之生效
22.       echo nameserver $DNS > /etc/resolv.conf   

23.   #配置文件不存在,使用默认配置
24. else
25.                           
26.                         #如果根文件系统为nfs,则说明网卡已经配置OK,这里什么都不需要配置了
27.       if grep -q "^/dev/root / nfs " /etc/mtab ; then   
28.           echo -n NFS root ... > /dev/ttySAC0   
29.       else   
30.                         #将网卡的IP地址设定为192.168.1.230
31.       /sbin/ifconfig eth0 192.168.1.230 netmask 255.255.255.0 up   
32.       fi   
33. fi
34.     
35.   echo Done > /dev/ttySAC0
可以看到,NFS自动识别就是靠判断/etc/mtab中是否有 nfs的挂载记录实现的。
这是 root qtopia文件系统中/etc/eth0-settings 文件
这是 root qtopia文件系统中/etc/eth0-settings 文件
复制代码
1.     IP=192.168.1.230   
2.     Mask=255.255.255.0   
3.     Gateway=192.168.1.1   
4.     DNS=192.168.1.1   
5.     MAC=08:90:90:90:90:90
终于到最后了,启动Qtopia GUI 环境
复制代码
1.     /bin/qtopia &   
2.     echo "                                  " > /dev/tty1   
3.     echo "Starting Qtopia, please waiting..." > /dev/tty1
可以看到,这里 Qtopia 是通过运行/bin/qtopia 来启动的。事实上,/bin/qtopia 也是一
个脚本,它的任务是设定 Qtopia 运行必要的环境, 最后通过调用 qpe 可执行文件真正启动
Qtopia。这是它的全部内容,我加入了一些注释:
1.     #!/bin/sh
2.
3. #tslib 环境变量设置,包括了touchscreen 设备文件,tslib 配置文件,tslib plug-in 位置和touchscreen 校准数据文件
4. export TSLIB_TSDEVICE=/dev/input/event0
5. export TSLIB_CONFFILE=/usr/local/etc/ts.conf
6. export TSLIB_PLUGINDIR=/usr/local/lib/ts
7. export TSLIB_CALIBFILE=/etc/pointercal
8. #Qtopia 环境变量设置,设定了Qtopia 主要文件位置
9. export QTDIR=/opt/Qtopia
10. export QPEDIR=/opt/Qtopia
11. #设定PATH 和LD_LIBRARY_PATH 以包含Qtopia 的可执行文件和共享库文件,方便Qtopia 正确运行
12. export PATH=$QTDIR/bin:$PATH
13. export LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH
14.
15. #通过判断/sys/devices/virtual/input/input0/uevent 中是否包含touchscreen 信息使Qtopia 自动识别touchscreen
和USB 鼠标
16. TS_INFO_FILE=/sys/devices/virtual/input/input0/uevent
17. if [ -e $TS_INFO_FILE -a "/bin/grep -q TouchScreen < $TS_INFO_FILE" ]; then
18. export QWS_MOUSE_PROTO="TPanel:/dev/input/event0 USB:/dev/input/mice"
19. if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then
20. rm /etc/pointercal
21. fi
22. else
23. export QWS_MOUSE_PROTO="USB:/dev/input/mice"
24. >/etc/pointercal
25. fi
26. unset TS_INFO_FILE
27.
28. export QWS_KEYBOARD=TTY:/dev/tty1
29. export KDEDIR=/opt/kde
30.
31. export HOME=/root
32.
33. #通过调用/opt/Qtopia/bin/qpe 真正启动Qtopia
34. exec $QPEDIR/bin/qpe 1>/dev/null 2>/dev/null
到此为止,文件系统从初始化到最终启动Qtopia GUI 环境的全部过程就结束了,大家
可以看到,友善之臂的“小秘密”其实都在这里,说穿了很简单:)只要大家能够静下心来认真看
看脚本,看看源代码,加上一些背景知识的了解,搞清楚一个嵌入式系统就这么简单

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

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-29 19:40 , Processed in 1.046875 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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