1./sbin/init加载过程分析
1.1 /etc/inittab
# see busybox-1.00rc2/examples/inittab for more examples
::sysinit:/etc/rc.d/rcS
::respawn:/sbin/getty -n -l /sbin/autologin ttyO0 115200 vt100
/*启动自动密码登录,进入串口交互*/
::ctrlaltdel:/sbin/reboot
::shutdown:/etc/rc.d/rcS stop
::restart:/sbin/init
1.2 /etc/rc.d/rcS
#! /bin/sh
# load the configuration information
. /etc/rc.d/rc.conf
mode=${1:-start}
if [ $mode = "start" ]; then
services=$cfg_services
else
services=$cfg_services_r
fi
cfg_services=${2:-$services}
# run the configured sequence
for i in $cfg_services
do
if [ -x /etc/rc.d/init.d/$i ]; then
/etc/rc.d/init.d/$i $mode /*启动14个服务*/
fi
done
if [ $mode = "start" ]; then
echo 6 > /proc/sys/kernel/printk
/sys_data/bin/ltc4155_test -w 0x00 0x0E
fi
(udhcpc -b -i eth0 -p /var/run/udhcpc.pid -R)---1500中3G/4G功能时加入该语句,路由器分配地址给监控器。
usbplug.sh $mode /*在/usr/bin目录中,挂载/usb_disk */
MonitorBox $mode /*在/usr/bin目录中,profile设置环境变量并启动应用MonitorBox*/
1.3 /etc/rc.d/rc.conf
cfg_services="mount-proc-sys mdev hostname depmod modules filesystems mount_sysdata mount_usrdata syslog inetd can eth wlan bmp_config"
cfg_services_r="wlan eth can inetd syslog mount_usrdata mount_sysdata filesystems modules depmod hostname mdev mount-proc-sys bmp_config"
export NTP_SERVER=""
export MODLIST=""
export RAMDIRS=""
export TMPFS="tmpfs"
export TMPFS_SIZE="512k"
export READONLY_FS=""
export INETD_ARGS=""
export BOA_ARGS=""
export SMBD_ARGS=""
export NMBD_ARGS=""
export DHCP_ARG=""
export DEPLOYMENT_STYLE="RAMDISK"
export SYSCFG_DHCPC_CMD="udhcpc -b -i "
export DROPBEAR_ARGS=""
/etc/rc.d/init.d/mount-proc-sys
#!/bin/sh
if [ "$1" = "start" -o "$1" = "restart" ]
then
echo "Mounting /proc and /sys "
mount -n -t proc proc /proc
mount -n -t sysfs sys /sys /*挂载proc、sys,按理说fstab里面就可以了*/
fi
/etc/rc.d/init.d/hostname
#!/bin/sh
if test -f /etc/hostname
then
hostname -F /etc/hostname /*设置主机名称*/
fi
/etc/hostname
MonitorBox
/etc/rc.d/init.d/mdev
#!/bin/sh
if [ ! -x /sbin/mdev ]
then
exit 0
fi
case "$1" in
start)
echo /sbin/mdev > /proc/sys/kernel/hotplug
# put /dev in a tmpfs
mount -n -o mode=0755 -t tmpfs mdev /dev /*挂载dev可以放在fstab*/
# Create static device nodes in /dev
mknod /dev/console c 5 1 /*说明/sbin/init启动阶段中sysinit字段执行前还没有涉及到console、null设备???*/
chmod 600 /dev/console
mknod /dev/null c 1 3
chmod 666 /dev/null
# make and mount devpts
mkdir /dev/pts
mount -n -t devpts devpts /dev/pts
echo "Starting the hotplug events dispatcher mdev"
/sbin/mdev -s
mkdir /dev/shm
;;
stop)
;;
*)
echo "Usage: /etc/rc.d/init.d/mdev {start|stop}"
exit 1
;;
esac
exit 0
/etc/rc.d/init.d/depmod
#!/bin/sh
if [ ! -x /sbin/depmod ]
then
exit 0
fi
if [ "$1" = "start" -a ! -s /lib/modules/`uname -r`/modules.dep ]
then
echo Running depmod
/sbin/depmod -a /*检测可载入模块的相依性,建立modules.dep后续提供给modprobe使用,提供解决 module 载入相依的问题*/
fi
/etc/rc.d/init.d/modules
#!/bin/sh
if [ "$1" = "start" -a -x /sbin/modprobe -a "$MODLIST" ]
then
for i in $MODLIST
do
echo Loading module $i
modprobe $i /*加载驱动模块*/
done
fi
/etc/rc.d/init.d/filesystems
#!/bin/sh
if [ "$1" = "stop" ]
then
echo Unmounting filesystems
umount -a -r
mount -o remount -r %root% /
[ -x /sbin/swapoff ] && swapoff -a
fi
if [ "$1" = "start" ]
then
echo Mounting filesystems
if [ "$TMPFS" = "tmpfs" ]
then
mount -n -t $TMPFS shm /dev/shm
fi
if [ "$READONLY_FS" != "y" ]
then
mount -n -o remount -w %root% /
NFSBOOT="`cat /proc/cmdline | grep -q /dev/nfs ; echo $?`"
if [ "$NFSBOOT" == "0" -a -n "$RAMDIRS" ]
then
echo "Booted NFS, not relocating: $RAMDIRS"
RAMDIRS=""
fi
else
# initramfs, ramdisks, others? come up read/write by default
mount -n -o remount -r %root% /
RAMDIRS="$RAMDIRS /tmp /etc /var"
fi
ln -s /proc/mounts /etc/mtab /*mount/umount会动态更新mtab文件,fdisk、df必读取mtab文件,mtab表示系统已经装载的文件系统*/
if [ ! -d /dev/pts ]
then
mkdir /dev/pts
fi
mount -a /*自动挂载 /etc/fstab 里面的东西,系统准备装载的文件系统*/
fi
/etc/fstab
# /etc/fstab: static file system information.
# file system mount type options dump pass
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
/dev/mmcblk0p1 /usb_disk vfat defaults 0 0
/dev/mtdblock9 /usr_data ext2 defaults 0 0
/etc/rc.d/init.d/mount_sysdata
#!/bin/sh
if [ "$1" = "stop" ] ; then
umount /sys_data
sleep 2s
ubidetach /dev/ubi_ctrl -m 8
fi
if [ "$1" = "restart" ] ; then
umount /sys_data
sleep 2s
ubidetach /dev/ubi_ctrl -m 8
fi
if [ "$1" = "start" -o "$1" = "restart" ] ; then
if [ ! -d /sys_data ]; then
mkdir -m 777 /sys_data
fi
ubiattach /dev/ubi_ctrl -m 8 -O 2048
mount -t ubifs ubi1:sys_data /sys_data
exit 0
fi
/etc/rc.d/init.d/mount_usrdata
#!/bin/sh
if [ "$1" = "start" ]; then
if [ -f /usr_data/ready ]; then
echo "User's data is initialized"
cp -v /sys_data/system/* /usr_data/system
echo "User's data is ok"
else
echo "Initialize usr's data"
umount /usr_data
mkfs.ext2 /dev/mtdblock9
mount -t ext2 /dev/mtdblock9 /usr_data
mkdir /usr_data/system
cp -v /sys_data/system/* /usr_data/system
echo "cp usr's data ok"
touch /usr_data/ready
fi
sync
fi
/etc/rc.d/init.d/syslog
#! /bin/sh
#
# syslog init.d script for busybox syslogd/klogd
# Written by Robert Griebl
# Configuration file added by
set -e
if [ -f /etc/syslog ] ; then
. /etc/syslog
LOG_LOCAL=0
LOG_REMOTE=0
for D in $DESTINATION; do
if [ "$D" = "buffer" ] ; then
SYSLOG_ARGS="$SYSLOG_ARGS -C$BUFFERSIZE"
LOG_LOCAL=1
elif [ "$D" = "file" ] ; then
if [ -n "$LOGFILE" ] ; then
SYSLOG_ARGS="$SYSLOG_ARGS -O $LOGFILE"
fi
if [ -n "$ROTATESIZE" ] ; then
SYSLOG_ARGS="$SYSLOG_ARGS -s $ROTATESIZE"
fi
if [ -n "$ROTATEGENS" ] ; then
SYSLOG_ARGS="$SYSLOG_ARGS -b $ROTATEGENS"
fi
LOCAL=0
elif [ "$D" = "remote" ] ; then
SYSLOG_ARGS="$SYSLOG_ARGS -R $REMOTE"
LOG_REMOTE=1
fi
done
if [ "$LOG_LOCAL" = "1" -a "$LOG_REMOTE" = "1" ] ; then
SYSLOG_ARGS="$SYSLOG_ARGS -L"
fi
if [ -n "$MARKINT" ] ; then
SYSLOG_ARGS="$SYSLOG_ARGS -m $MARKINT"
fi
if [ "$REDUCE" = "yes" ] ; then
SYSLOG_ARGS="$SYSLOG_ARGS -S"
fi
else
# default: log to 16K shm circular buffer
SYSLOG_ARGS="-C"
fi
case "$1" in
start)
echo -n "Starting syslogd/klogd: "
start-stop-daemon -S -b -n syslogd -a /sbin/syslogd -- -n $SYSLOG_ARGS
start-stop-daemon -S -b -n klogd -a /sbin/klogd -- -n
echo "done"
;;
stop)
echo -n "Stopping syslogd/klogd: "
start-stop-daemon -K -n syslogd
start-stop-daemon -K -n klogd
echo "done"
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: syslog { start | stop | restart }" >&2
exit 1
;;
esac
exit 0
/etc/syslog
DESTINATION="buffer" # log destinations (buffer file remote)
MARKINT=20 # interval between --mark-- entries [min]
REDUCE=no # reduced-size logging
BUFFERSIZE=64 # buffer: size of circular buffer [kByte]
LOGFILE=/var/log/messages # file: where to log
ROTATESIZE=32 # file: rotate log if grown beyond X [kByte] (busybox 1.2+)
ROTATEGENS=1 # file: keep X generations of rotated logs (busybox 1.2+)
REMOTE=loghost:514 # remote: where to log
FOREGROUND=no # run in foreground (don't use!)
/etc/rc.d/init.d/inetd
#!/bin/sh
if [ ! -x /usr/sbin/inetd ]
then
exit 0
fi
if [ "$1" = "stop" -o "$1" = "restart" ]
then
echo "Stopping inetd: "
killall inetd
fi
if [ "$1" = "start" -o "$1" = "restart" ]
then
echo "Starting inetd: "
/usr/sbin/inetd $INETD_ARGS
fi
/*
inetd是监视一些网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理连接请求。它会检查 /etc/inetd.conf 以确定提供哪些服务,检查/etc/services以确定对哪个端口监视在 inetd.conf 中列出的服务、端口号与协议名称,协议的每个条目必须在 /etc/protocols 文件中有一个与之匹配的条目。*/
/*
/etc/inetd.conf文件保存了系统提供internet服务的数据库,允许inetd在启动时决定自己将代表哪些服务等待服务请求。如果一种服务的守护进程没有包含在inetd.conf文件中,那么当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
/etc/protocols
# /etc/protocols:
# $Id: protocols,v 1.1 1995/02/24 01:09:41 imurdock Exp $
#
# Internet (IP) protocols
#
# from: @(#)protocols 5.1 (Berkeley) 4/17/89
#
# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).
ip 0 IP # internet protocol, pseudo protocol number
icmp 1 ICMP # internet control message protocol
igmp 2 IGMP # Internet Group Management
ggp 3 GGP # gateway-gateway protocol
ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')
st 5 ST # ST datagram mode
tcp 6 TCP # transmission control protocol
egp 8 EGP # exterior gateway protocol
pup 12 PUP # PARC universal packet protocol
udp 17 UDP # user datagram protocol
hmp 20 HMP # host monitoring protocol
xns-idp 22 XNS-IDP # Xerox NS IDP
rdp 27 RDP # "reliable datagram" protocol
iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4
xtp 36 XTP # Xpress Tranfer Protocol
ddp 37 DDP # Datagram Delivery Protocol
idpr-cmtp 38 IDPR-CMTP # IDPR Control Message Transport
ipv6 41 IPv6 # IPv6
ipv6-route 43 IPv6-Route # Routing Header for IPv6
ipv6-frag 44 IPv6-Frag # Fragment Header for IPv6
idrp 45 IDRP # Inter-Domain Routing Protocol
rsvp 46 RSVP # Reservation Protocol
gre 47 GRE # General Routing Encapsulation
esp 50 ESP # Encap Security Payload for IPv6
ah 51 AH # Authentication Header for IPv6
skip 57 SKIP # SKIP
ipv6-icmp 58 IPv6-ICMP # ICMP for IPv6
ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6
ipv6-opts 60 IPv6-Opts # Destination Options for IPv6
rspf 73 RSPF # Radio Shortest Path First.
vmtp 81 VMTP # Versatile Message Transport
ospf 89 OSPFIGP # Open Shortest Path First IGP
ipip 94 IPIP # IP-within-IP Encapsulation Protocol
encap 98 ENCAP # Yet Another IP encapsulation
pim 103 PIM # Protocol Independent Multicast
/etc/rc.d/init.d/can
#!/bin/sh
if [ "$1" = "stop" -o "$1" = "restart" ]; then
echo "Stopping can: "
ip link set can0 down nmea2000 off
sleep 1s
fi
if [ "$1" = "start" -o "$1" = "restart" ]; then
source /usr_data/system/can-name /*导入CAN名称*/
echo "Starting can"
ip link set can0 type can bitrate 250000 restart-ms 100 triple-sampling on
ip link set can0 up nmea2000 on
echo "Setting the can name to $CAN_NAME"
ip addr add nmea2000 name $CAN_NAME dev can0
fi
注意:学习ip命令对比ifconfig命令的区别
/etc/rc.d/init.d/eth
#!/bin/sh
ETH0_INFO=`ifconfig eth0 | grep "inet addr"`
if [ "$1" = "start" ]; then
if [ ! -n "$ETH0_INFO" ]; then
/*从网络启动则eth0有配置,从nand启动则eth0为空执行该分支*/
/usr_data/system/eth0
else
echo "Eth0 is ready..."
fi
fi
/usr_data/system/eth0
#!/bin/sh
ifconfig eth0 up
ifconfig eth0 192.168.1.24 netmask 255.255.255.0
route add default gw 192.168.1.1
/etc/rc.d/init.d/wlan
#!/bin/sh
if [ "$1" = "start" -o "$1" = "restart" ]; then
if [ -f /usr_data/system/hostapd ]; then
/ sys_data /system/hostapd /*下载相应的开源库*/
echo "hostap up"
else
echo "hostap not found"
fi
fi
/sys_data/system/hostapd
#!/bin/sh
# Install driver of wl12xx SDIO Card
insmod /sys_data/lib/wifi/compat.ko
insmod /sys_data/lib/wifi/cfg80211.ko
insmod /sys_data/lib/wifi/mac80211.ko
insmod /sys_data/lib/wifi/wl12xx.ko
insmod /sys_data/lib/wifi/wl12xx_sdio.ko
# Configure wlan0
ifconfig wlan0 down
ifconfig wlan0 hw ether 00:D2:48:43:9F:FE
ifconfig wlan0 192.168.40.1 netmask 255.255.255.0
ifconfig wlan0 up
# Start DHCP service /*启动udhcpd服务功能*/
start-stop-daemon -S -x /usr/sbin/udhcpd -- /usr_data/system/udhcpd.conf -S
/*DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、 Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。*/
# Start FTP service on eth0
echo "Starting FTP" /*启动FTP服务功能*/
tcpsvd -vE 0 21 ftpd -w /sys_data/system & exit 0
/* start-stop-daemon命令:
启动和停止系统一个守护程序,并传递参数给它。*/
/etc/rc.d/init.d/bmp_config
#!/bin/sh
if [ "$1" = "start" ]; then
echo "bmp_config Running"
if [ -f /usr_data/system/bmp_conf ]; then
/usr_data/system/bmp_conf
echo "bmp configuration complete"
else
echo "bmp configuration fail"
fi
fi
1.4 /usr/bin/usbplug.sh
#!/bin/sh
#USBDEVNAME="mtdblock9"
USBDEVNAME="mmcblk0p1"
USBFLASHMOUNT="/usb_disk"
if [ "$1" = "start" ] ; then
modprobe g_mass_storage file=/dev/$USBDEVNAME luns="1" stall="0" removable="1" /*该命令实现mmcblk0p1(SD卡)设备即/usb_disk作为PC机的一个USB接口外设设备*/
fi
1.5 /usr/bin/APM
#!/bin/sh
if [ ! -x /sys_data/app/MonitorBox ]; then
echo "Have not find app,try to updata"
exit 1
fi
if [ "$1" = "stop" ]; then
echo "Stopping APP: "
killall -9 MonitorBox
if [ $? = 0 ]
then
exit 0
fi
exit 1
fi
if [ "$1" = "restart" ]; then
echo "restart APP: "
killall -9 MonitorBox
fi
if [ "$1" = "start" -o "$1" = "restart" ]; then
. /etc/profile
echo "Starting APP: "
cd /sys_data/app
./MonitorBox &
exit 0
fi
1.6 /etc/profile
alias ll='ls -l'
alias la='ll -a'
export PS1='\u@\h \w$ '
export PS2='> '
#alsa mixer
export TERM=vt100
export TERMINFO=/usr/share/terminfo
export SYSDATA=/sys_data
#tslib settings
export TSPREFIX=$SYSDATA/lib/tslib
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CALIBFILE=/usr_data/system/pointercal
export TSLIB_CONFFILE=$TSPREFIX/etc/ts.conf
export TSLIB_PLUGINDIR=$TSPREFIX/lib/ts
#global running settings
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSPREFIX/lib:/lib:$SYSDATA/lib/arm-alsa/lib:$SYSDATA/lib/libmad-arm/lib:$SYSDATA/lib/lib-sysfunc
export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:$TSPREFIX/bin:$SYSDATA/lib/arm-alsa/bin:$SYSDATA/bin
export TMPDIR=/tmp
2.sys_data目录
---app目录:存放应用程序
---bin目录:自己编写的测试用例
---system目录:存放应用程序使用的配置文件等信息
---lib目录:应用库
---arm-alsa目录:高级Linux音频架构,提供了音频和MIDI(音乐设备数字化接口)的支持,又是声音子系统
---libMAD目录:MPEG音频解码库(支持MP3解码)
---tslib目录:触摸屏驱动的适配层(提供滤波、去抖、校准等功能)
---wifi目录:WiFi驱动.ko
3.usr目录
---/usr/share/Terminfo目录:
当Unix被设计成使用终端来访问主机系统的时候,Unix的开发人员需要解决的一个重要问题就是每种类型的终端都有自己的特征,并使用自己的命令集,并且这些命令的名称不尽相同.解决方法就是,将所有不同类型终端的描述收集到一个数据库中,当程序希望向终端发送命令时,它可以通过使用数据库中的信息以一种标准化的方式完成.
---/usr/share/zoneinfo目录:
/usr/share/zoneinfo 在这个路径下有所有时区
如果要看在各时区下的时间,可以这样:
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date
zoneinfo文件中的内容,在运行date命令时使用。
---/usr/share/udhcpc目录:
一个default.script文件
---/usr/local目录:空目录
4./etc中未分析到的文件
4.1 /etc/securetty
/etc/securetty 文件允许你规定“root”用户可以从哪个tty设备登录。登录程序(通常是/bin/login)需要读取“/etc/securetty”文件。
它的格式:列出来的tty设备都是允许登录的,注释掉或是在这个文件中不存在的都是不允许root登录的。
4.2 /etc/passwd和shadow
登录程序(通常是/bin/login)需要读取“/etc/passwd和shadow”文件。
4.3 /etc/hosts
记录一些IP和域名的对应关系。
localhost 127.0.0.1
4.4 /etc/host.conf
order hosts,bind
解析器查询顺序配置文件
4.5 /etc/mdev.conf
mdev 的可选配置文件,以控制设备节点的 所有者和权限。
文件的格式如下:
内容:
# system all-writable devices
full 0:0 0666
null 0:0 0666
ptmx 0:0 0666
random 0:0 0666
tty 0:0 0666
zero 0:0 0666
# console devices
tty[0-9]* 0:5 0660
# loop devices
loop[0-9]* 0:0 0660 =loop/
# i2c devices
#i2c-0 0:0 0666 =i2c/0
#i2c-1 0:0 0666 =i2c/1
# frame buffer devices
fb[0-9] 0:0 0666 >screen
# input devices
mice 0:0 0660 =input/
event.* 0:0 0660 =input/
ts.* 0:0 0660 =input/
# rtc devices
rtc0 0:0 0644 >rtc
rtc[1-9] 0:0 0644
# misc devices
# alsa sound devices and audio stuff
pcm.* 0:0 0660 =snd/
control.* 0:0 0660 =snd/
midi.* 0:0 0660 =snd/
seq 0:0 0660 =snd/
timer 0:0 0660 =snd/
adsp 0:0 0660 >sound/
audio 0:0 0660 >sound/
dsp 0:0 0660 >sound/
mixer 0:0 0660 >sound/
sequencer.* 0:0 0660 >sound/
4.6 /etc/group
/etc/group 文件是用户组的配置文件,内容包括用户和用户组,并且能显示出用户是归属哪个用户组或哪几个用户组,因为一个用户可以归属一个或多个不同的用户组;同一用 户组的用户之间具有相似的特征。
4.7 /etc/fw_env.config ???
# NAND example
#/dev/mtd0 0x4000 0x4000 0x20000 2
/dev/mtd5 0x0000 0x2000 0x20000 1
4.8 /etc/modprobe.conf ???
install ide-cs /sbin/modprobe --ignore-install ide_cs && /sbin/modprobe ide_disk
4.9 /etc/watchdog.conf ???
#ping = 172.31.14.1
#ping = 172.26.1.255
#interface = eth0
file = /var/log/messages
#change = 1407
# Uncomment to enable test. Setting one of these values to '0' disables it.
# These values will hopefully never reboot your machine during normal use
# (if your machine is really hung, the loadavg will go much higher than 25)
#max-load-1 = 24
#max-load-5 = 18
#max-load-15 = 12
# Note that this is the number of pages!
# To get the real size, check how large the pagesize is on your machine.
#min-memory = 1
#repair-binary = /usr/sbin/repair
#repair-timeout =
#test-binary =
#test-timeout =
watchdog-device = /dev/watchdog
#watchdog-timeout = 4
# Defaults compiled into the binary
#temperature-device =
#max-temperature = 120
# Defaults compiled into the binary
#admin = root
#interval = 1
#logtick = 1
#log-dir = /var/log/watchdog
# This greatly decreases the chance that watchdog won't be scheduled before
# your machine is really loaded
realtime = yes
priority = 1
# Check if syslogd is still running by enabling the following line
pidfile = /var/run/syslogd.pid
5.要点总结
通过上面分析可知:
1. 挂载proc、sys
2. 设置主机名称
3. 创建console、null设备,启用mdev功能
4. 检测驱动模块相依性并加载模块
5. 挂载fstab中的文件系统(/usb_disk目录,vfat文件系统等)
6. 挂载/sys_data,ubi文件系统
7. 挂载/usr_data,ext2文件系统(备份重要设置文件功能)
8. 设置syslog
9. 启动inet进程,监视一些网络请求
10. 设置CAN通讯接口功能
11. 设置eth以太网接口功能
12. 设置wlan无线网接口功能(加载WiFi驱动,设置wlan0)
13. 启动udhcpd服务功能(与udhcpc区别)
14. 启动FTP服务功能
15. 板卡上SD卡作为PC机外设存储功能
16. 设置环境变量profile文件,链接库函数的路径
17. 应用库:高级Linux音频架构ALSA
18. 应用库:MPEG音频解码库libMAD
19. 应用库:触摸屏驱动适配层