arm linux rcs文件分析,Linux下的rcS文件的一些分析

由于init=/linuxrc,

因此,在文件系统挂载后,运行的第一个程序就是根目录下的linuxrc,而这是一个指向/bin/busybox的链接,因此,系统起来后运行的第一个程序就是busybox本身。

Busybox首先将试图解析/etc/inittab来获取进一步的初始化配置信息(参考busybox源代码init/init.c中的parse_inittab()函数)。但,本质上root_qtopia中并没有/etc/inittab这个配置文件。根据busybox的逻辑,将生成默认的配置,其中的new_init_action(SYSINIT,

INIT_SCRIPT,

“”)决定了接下来初始化的脚本是INIT_SCRIPT所定义的值。这个宏的默认值是“etc/init.d/rcS”.

/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 CTRL-C &c only in this shell so wecan interrupt

subprocesses.

#

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目录下动态的创建系统中当前实际由的设备节点。

显然,方法1)有很大的局限性,仅限于没有设备动态增加或减少的情况,不适用于很多设备热插拔的情况,比如U盘,SD卡等。方法2)是目前大多数PC上的linux的做法(基于udev实现)。这种方法有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盘

注意:在文件系统里存在/etc/mdev.conf文件,它包含了medv的配置信息,通过这个文件,我们可以自定义一些设备节点的名称或链接来满足特定的需要。具体内容后面简述。

#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" " >/dev/tty1

echo"Starting

networking..." > /dev/tty1

sleep1

/etc/rc.d/init.d/httpdstart

echo" " >/dev/tty1

echo"Starting

web server..." > /dev/tty1

sleep1

/etc/rc.d/init.d/ledsstart

echo" " >/dev/tty1

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" "

> /dev/tty1

echo"Starting

Qtopia, please waiting..." > /dev/tty1

syslog-

用于记录内核和应用程序debug信息

netd– inetd,

一个挂载启动各种网络相关服务的看守进程

httpd– http

server看守进程

leds–

跑马灯看守进程

自定义启动的应用程序脚本如下:

#!/bin/sh

./bin/ts-device ##启动ts,ts能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。

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

exportQWS_MOUSE_PROTO="Tslib:$TSLIB_TSDEVICE

MouseMan:/dev/input/mice"

if [ ! -s /etc/pointercal ] ; then

rm /etc/pointercal

/usr/local/bin/ts_calibrate

fi

else

exportQWS_MOUSE_PROTO="MouseMan:/dev/input/mice"

fi

unsetTS_INFO_FILE

export

QWS_KEYBOARD=TTY:/dev/tty1

export

HOME=/root

##运行我们自定义的应用程序

/udisk/user_define_app

–qws

##用于支持热插拔,处理内核产生的hotplug事件。

hotplug

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值