am57xx Damo根文件加载过程

来源:互联网 发布:servlet获取复选框数据 编辑:程序博客网 时间:2024/05/22 15:10

am57xx_env根文件加载过程

1. /etc/inittab

# The default runlevel.

id:5:initdefault:    /*默认启动级别为5*/

si::sysinit:/etc/init.d/rcS

 

# What to do in single-user mode.

~~:S:wait:/sbin/sulogin

 

# /etc/init.d executes the S and K scripts upon change of runlevel.

# Runlevel 0 is halt;Runlevel 1 is single-user;Runlevels 2-5 are multi-user;Runlevel 6 is reboot.

 

l0:0:wait:/etc/init.d/rc 0

l1:1:wait:/etc/init.d/rc 1

l2:2:wait:/etc/init.d/rc 2

l3:3:wait:/etc/init.d/rc 3

l4:4:wait:/etc/init.d/rc 4

l5:5:wait:/etc/init.d/rc 5

l6:6:wait:/etc/init.d/rc 6

# Normally not reached, but fallthrough in case of emergency.

z6:6:respawn:/sbin/sulogin

O2:12345:respawn:/sbin/getty -L 115200 ttyO2

1:12345:respawn:/sbin/getty 38400 tty1

总结:在etc目录中目录rc0.d、rc1.d、rc2.d、rc3.d、rc4.d、rc5.d、rc6.d、rcS.d表示不同运行等级,其中只是链接文件,实际指向目录/etc/init.d中文件;不同级别对应不同目录,运行了不同个数的脚本。

2. /etc/init.d/rcS

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

runlevel=S

prevlevel=N

umask 022

export PATH runlevel prevlevel

# Make sure proc is mounted

[ -d "/proc/1" ] || mount /proc  /*确认proc并挂载*/

 

. /etc/default/rcS  /*为/etc/rcS.d目录中启动脚本设置默认值*/

# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.

trap ":" INT QUIT TSTP

# Call all parts in order.

exec /etc/init.d/rc S  /*使用S等级启动服务*/

--- /etc/default/rcS

#Defaults for the boot scripts in /etc/rcS.d

# Time files in /tmp are kept in days.

TMPTIME=0

# Set to yes if you want sulogin to be spawned on bootup

SULOGIN=no

# Set to no if you want to be able to login over telnet/rlogin

# before system startup is complete (as soon as inetd is started)

DELAYLOGIN=no

# Assume that the BIOS clock is set to UTC time (recommended)

UTC=yes  /*使用BIOS时钟设置UTC时间*/

# Set VERBOSE to "no" if you would like a more quiet bootup.

VERBOSE=no /*设置VERBOSE为no,可以更加简便的启动*/

# Set EDITMOTD to "no" if you don't want /etc/motd to be edited automatically

EDITMOTD=no

# Whether to fsck root on boot

ENABLE_ROOTFS_FSCK=no

# Set FSCKFIX to "yes" if you want to add "-y" to the fsck at startup.

FSCKFIX=yes

# Set TICKADJ to the correct tick value for this specific machine

#TICKADJ=10000

# Enable caching in populate-volatile.sh

VOLATILE_ENABLE_CACHE=yes

# Indicate whether the rootfs is intended to be read-only or not.

# Setting ROOTFS_READ_ONLY to yes and rebooting will give you a read-only rootfs.

# Normally you should not change this value.

ROOTFS_READ_ONLY=no

--- /etc/init.d/rc

#!/bin/sh

. /etc/default/rcS

export VERBOSE

 

startup_progress()

{

    step=$(($step + $step_change))

    if [ "$num_steps" != "0" ]; then

        progress=$((($step * $progress_size / $num_steps) + $first_step))

    else

        progress=$progress_size

    fi

    

    if [ -e /mnt/.psplash/psplash_fifo ]; then

        echo "PROGRESS $progress" > /mnt/.psplash/psplash_fifo

    fi

}

 

startup()

{

  [ "$VERBOSE" = very ] && echo "INIT: Running $@..."

/*以.sh结尾的脚本是必须执行的脚本,不是以.sh结尾的脚本服务是可以开启或关闭的,通过start或stop参数*/

  case "$1" in /*传入的第一个参数是要执行的文件名,第二个参数是start*/

*.sh)

(/*若文件名是以.sh结尾的则执行这个脚本*/

trap - INT QUIT TSTP

scriptname=$1

shift

. $scriptname 

)

;;

*) /*若不是以.sh结尾的*/

/*实际上rc进程调用的脚本都称为初始化脚本。要启动、停止或者重启一个服务,应该用参数start、stop和restart。*/

"$@" /*执行这个脚本带参数,比如传入的是$@=“/etc/rcS.d/S02banner start”,即带start参数执行这个脚本,这样可以灵活的控制服务的start或者stop*/

;;

  esac

  startup_progress

}

 

#忽略这三个信号,防止脚本执行时使用ctrl-C就退出脚本.

trap ":" INT QUIT TSTP

 

#设置终端,将CR字符映射为NL字符,避免阶梯效应

stty onlcr 0>&1

 

# Limit stack size for startup scripts

[ "$STACK_SIZE" == "" ] || ulimit -S -s $STACK_SIZE

 

# Now find out what the current and what the previous runlevel are.

 

runlevel=$RUNLEVEL

# Get first argument. Set new runlevel to this argument.

[ "$1" != "" ] && runlevel=$1

if [ "$runlevel" = "" ]

then

echo "Usage: $0 <runlevel>" >&2

exit 1

fi

previous=$PREVLEVEL

[ "$previous" = "" ] && previous=N

/*传入参数是S的话,则runlevel=S、previous=N*/

export runlevel previous

 

/*检查该目录是否为空目录,执行里面的脚本等*/

if [ -d /etc/rc$runlevel.d ]

then

PROGRESS_STATE=0

progress_size=$(((100 - $PROGRESS_STATE) / 3))

 

case "$runlevel" in

0|6)

first_step=-100

progress_size=100

step_change=1

;;

     S)

first_step=$PROGRESS_STATE

progress_size=$(($progress_size * 2))

step_change=1

;;

*)

first_step=$(($progress_size * 2 + $PROGRESS_STATE))

step_change=1

;;

esac

 

num_steps=0

for s in /etc/rc$runlevel.d/[SK]*; /*取/etc/rcS.d目录下以S或K开头的文件名*/

do

/*去掉变量s中所有的/etc/rcS.d/S?的部分,若s剩下的文件名中为这5个中则跳出for*/

         case "${s##/etc/rc$runlevel.d/S??}" in 

              gdm|xdm|kdm|reboot|halt)

              break

              ;;

          esac

          num_steps=$(($num_steps + 1))/*表示查找到目录/etc/rcS.d下有多少个脚本*/

     done

     step=0

 

/*第一步,运行KILL脚本*/

if [ $previous != N ]

then

for i in /etc/rc$runlevel.d/K[0-9][0-9]*

do

[ ! -f $i ] && continue

startup $i stop /*在本文件中startup()函数*/

done

fi

 

/*第二步,运行这个级别的START脚本*/

for i in /etc/rc$runlevel.d/S* /*取得S开头的脚本*/

do

[ ! -f $i ] && continue /*检查是否为常规文件,不是则进行下次循环*/

/*如果previous=N/S此if语句不执行*/

if [ $previous != N ] && [ $previous != S ]

then

suffix=${i#/etc/rc$runlevel.d/S[0-9][0-9]}  /*获得i文件名的后缀*/

stop=/etc/rc$runlevel.d/K[0-9][0-9]$suffix  /*获得stop文件名*/

previous_start=/etc/rc$previous.d/S[0-9][0-9]$suffix

/*如果有起始脚本并且灭有停止脚本,则不进行这项服务,continue继续下一次循环*/

[ -f $previous_start ] && [ ! -f $stop ] && continue

fi

case "$runlevel" in

0|6)  /*运行级别0或者6*/

startup $i stop

;;

*)   /*在本文件中startup()函数,运行名称$i的脚本*/

startup $i start

;;

esac

done

fi

 

if [ "x$runlevel" != "xS" ] && [ ! -x /etc/rc${runlevel}.d/S??xserver-nodm ]; then

    if type psplash-write >/dev/null 2>&1; then

        TMPDIR=/mnt/.psplash psplash-write "QUIT" || true

        umount -l /mnt/.psplash

    fi

fi

3. /etc/init.d/***

3.1 /etc/init.d/alignment.sh

#!/bin/sh

if [ -e /proc/cpu/alignment ]; then

   echo "3" > /proc/cpu/alignment

fi

/* 设置Linux对出现字节对齐错误的处理方式:0(忽略),1(提醒警告),2(修复),3(修复+提醒警告),4(信号),5(信号+提醒警告)*/

 

3.2 /etc/init.d/alsa-state(声音系统)

安装了alsa的驱动,但是每一次开机的时候,声卡总是静音,要进行手工调解。

决定进行改造:

每次重启电脑后,音量设置都复位了,需重新调整音量。经研究,原来是我没有把ALSA声音系统的当前设置状态保存到 /var/lib/alsa/asound.state中。而每次重启电脑时,ALSA系统的初始化脚本(/etc/init.d/alsa)会用 /var/lib/alsa/asound.state这个默认的配置文件来设置ALSA系统的状态。所以就造成用户自已配置的状态失效,每次重启都还原到初始状态。有一个工具叫alsactl,它可自动把当前配置信息保存到/var/lib/alsa/asound.state中。alsactl包含在alsa-utils软件包中。用以下命令安装:

debian:~# apt-get install alsa-utils

把音量、音色等调整好后,保存到/var/lib/alsa/asound.state文件中:

debian:~# alsactl store

重启电脑,马上就可聆听到自由的声音了。

脚本内容:

#! /bin/sh

# source function library

. /etc/init.d/functions

 

asound_restore(){

echo "ALSA: Restoring mixer settings..."

if test -x /usr/sbin/alsactl -a -e /var/lib/alsa/asound.state

then

/usr/sbin/alsactl -f /var/lib/alsa/asound.state restore &

fi

}

asound_store(){

echo "ALSA: Storing mixer settings..."

if test -x /usr/sbin/alsactl

then

/usr/sbin/alsactl -f /var/lib/alsa/asound.state store

fi

}

case "$1" in

start)asound_restore ;;

stop)asound_store ;;

  status)

    status /usr/sbin/alsactl;

    exit $?

  ;;

  *)

    echo "Usage: /etc/init.d/alsa-state {start|stop|status}"

    exit 1

  ;;

esac

 

3.3 /etc/init.d/functions

该脚本是给/etc/init.d里边的文件使用的。提供了一些基础的功能,看看里边究竟有些什么。首先会设置umask,path,还有语言环境,然后会设置success,failure,warning,normal几种情况下的字体颜色。提供的重要方法:

checkpid:检查是否已存在pid,如果有一个存在,返回0(通过查看/proc目录)

daemon:启动某个服务。/etc/init.d目录部分脚本的start使用到这个

killproc:杀死某个进程。/etc/init.d目录部分脚本的stop使用到这个

pidfileofproc:寻找某个进程的pid

pidofproc:类似上面的,只是还查找了pidof命令

status:返回一个服务的状态

echo_success,echo_failure,echo_passed,echo_warning分别输出各类信息

success,failure,passed,warning分别记录日志并调用相应的方法

action:打印某个信息并执行给定的命令,它会根据命令执行的结果来调用success,failure方法

strstr:判断$1是否含有$2

confirm:显示"Start service $1(Y)es/(N)o/(C)ontinue?[Y]"的提示信息,并返回选择结果

脚本内容:

# -*-Shell-script-*-

NORMAL="\\033[0;39m"         # Standard console grey

SUCCESS="\\033[1;32m"        # Success is green

WARNING="\\033[1;33m"        # Warnings are yellow

FAILURE="\\033[1;31m"        # Failures are red

INFO="\\033[1;36m"           # Information is light cyan

BRACKET="\\033[1;34m"        # Brackets are blue

 

pidofproc () {

# pidof output null when no program is running, so no "2>/dev/null".

pid=`pidof $1`

status=$?

case $status in

0)

echo $pid

return 0

;;

127)

echo "ERROR: command pidof not found" >&2

exit 127

;;

*)

return $status

;;

esac

}

machine_id() { # return the machine ID

awk 'BEGIN { FS=": " } /Hardware/ \

{ gsub(" ", "_", $2); print tolower($2) } ' </proc/cpuinfo

}

killproc() { # kill the named process(es)

pid=`pidofproc $1` && kill $pid

}

status() {

    local pid

    if [ "$#" = 0 ]; then

        echo "Usage: status {program}"

        return 1

    fi

    pid=`pidofproc $1`

    if [ -n "$pid" ]; then

        echo "$1 (pid $pid) is running..."

        return 0

    else

        echo "$1 is stopped"

    fi

    return 3

}

success() {

    echo -n -e "${BRACKET}[${SUCCESS}  OK  ${BRACKET}]${NORMAL}"

    return 0

}

failure() {

    local rc=$*

    echo -n -e "${BRACKET}[${FAILURE} FAIL ${BRACKET}]${NORMAL}"

    return $rc

}

warning() {

    local rc=$*

    echo -n -e "${BRACKET}[${WARNING} WARN ${BRACKET}]${NORMAL}"

    return $rc

}

passed() {

    local rc=$*

    echo -n -e "${BRACKET}[${SUCCESS} PASS ${BRACKET}]${NORMAL}"

    return $rc

}

 

3.4 /etc/init.d/avahi-daemon(零配置网络服务)

Zeroconf(Zero configuration networking)零配置网络服务规范,是一种用于自动生成可用IP地址的网络技术,不需要额外的手动配置和专属的配置服务器。“零 配置网络服务”的目标,是让非专业用户也能便捷的连接各种网络设备,例如计算机,打印机等。整个搭建网络的过程都是通过程式自动化实现。如果没有 zeroconf,用户必须手动配置一些服务,例如DHCP、DNS,计算机网络的其他设置等。这些对非技术用户和新用户们来说是很难的事情。Zeroconf规范的提出者是Apple公司。

Avahi是Zeroconf规范的开源实现。Avahi允许程序在不需要进行手动网络配置的情况 下,在一个本地网络中发布和获知各种服务和主机。例如,当某用户把他的计算机接入到某个局域网时,如果他的机器运行有Avahi服务,则Avahi程式自 动广播,从而发现网络中可用的打印机、共享文件和可相互聊天的其他用户。这有点象他正在接收局域网中的各种网络广告一样。

脚本内容:

#!/bin/sh

if [ -f /lib/lsb/init-functions ]

then

    . /lib/lsb/init-functions

else

    # int log_begin_message (char *message)

    log_begin_msg () {

        if [ -z "$1" ]; then

    return 1

        fi

        echo " * $@"

    }

 

    # int log_end_message (int exitstatus)

    log_end_msg () {

    # If no arguments were passed, return

[ -z "$1" ] && return 1

    # Only do the fancy stuff if we have an appropriate terminal

    # and if /usr is already mounted

TPUT=/usr/bin/tput

EXPR=/usr/bin/expr

if [ -x $TPUT ] && [ -x $EXPR ] && $TPUT hpa 60 >/dev/null 2>&1; then

    COLS=`$TPUT cols`

    if [ -n "$COLS" ]; then

COL=`$EXPR $COLS - 7`

    else

COL=73

    fi

    UP=`$TPUT cuu1`

    END=`$TPUT hpa $COL`

    START=`$TPUT hpa 0`

    RED=`$TPUT setaf 1`

    NORMAL=`$TPUT op`

    if [ $1 -eq 0 ]; then

echo "$UP$END[ ok ]"

    else

echo -e "$UP$START $RED*$NORMAL$END[${RED}fail${NORMAL}]"

    fi

else

    if [ $1 -eq 0 ]; then

echo "   ...done."

    else

echo "   ...fail!"

    fi

fi

return $1

    }

    

    log_warning_msg () {

if log_use_fancy_output; then

    YELLOW=`$TPUT setaf 3`

    NORMAL=`$TPUT op`

    echo "$YELLOW*$NORMAL $@"

else

    echo "$@"

fi

    }

 

fi

#set -e

PATH=/sbin:/bin:/usr/sbin:/usr/bin

DESC="Avahi mDNS/DNS-SD Daemon"

NAME="avahi-daemon"

DAEMON="/usr/sbin/$NAME"

SCRIPTNAME=/etc/init.d/$NAME

 

# Gracefully exit if the package has been removed.

test -x $DAEMON || exit 0

 

# don't start if /etc/default/avahi-daemon says so.

AVAHI_DAEMON_START=1

test -f /etc/default/avahi-daemon && . /etc/default/avahi-daemon

 

if [ "$AVAHI_DAEMON_START" != "1" -a "$1" != "stop" ]; then

    log_warning_msg "Not starting $DESC $NAME, disabled via /etc/default/$NAME"

    exit 0

fi

 

# Function that starts the daemon/service.

d_start() {

    modprobe capability >/dev/null 2>&1 || true

 

    $DAEMON -c && return 0

 

    if [ -s /etc/localtime ]; then

if [ ! -d /etc/avahi/etc ]; then

    mkdir -p /etc/avahi/etc >/dev/null 2>&1

fi

cp -fp /etc/localtime /etc/avahi/etc >/dev/null 2>&1

    fi;

    

    $DAEMON -D

}

 

# Function that stops the daemon/service.

d_stop() {

    $DAEMON -c && $DAEMON -k

}

 

# Function that reload the config file for the daemon/service.

d_reload() {

    $DAEMON -c && $DAEMON -r

}

# Function that check the status of the daemon/service.

d_status() {

    $DAEMON -c

    status=$?

    if [ $status = 0 ]; then

        echo "$DESC is running"

        return 0

    else

        echo "$DESC is not running"

        return 3

    fi

}

 

case "$1" in

    start)

        log_begin_msg "Starting $DESC: $NAME"

        d_start

        log_end_msg $?

        ;;

    stop)

        log_begin_msg "Stopping $DESC: $NAME"

        d_stop

        log_end_msg $?

        ;;

    reload)

        log_begin_msg "Reloading services for $DESC: $NAME"

        d_reload

        log_end_msg $?

        ;;

    restart|force-reload)

        log_begin_msg "Restarting $DESC: $NAME"

        $DAEMON -c && d_stop

        d_start

        log_end_msg $?

        ;;

    status)

        d_status

;;

    *)

        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|reload|status}" >&2

        exit 1

        ;;

esac

exit $?

 

3.5 /etc/init.d/banner.sh

/*建立tty设备节点*/

#!/bin/sh

if [ ! -e /dev/tty ]; then

    /bin/mknod -m 0666 /dev/tty c 5 0

fi

 

if ( > /dev/tty0 ) 2>/dev/null; then

    vtmaster=/dev/tty0

elif ( > /dev/vc/0 ) 2>/dev/null; then

    vtmaster=/dev/vc/0

elif ( > /dev/console ) 2>/dev/null; then

    vtmaster=/dev/console

else

    vtmaster=/dev/null

fi

echo > $vtmaster

echo "Please wait: booting..." > $vtmaster

 

3.6 /etc/init.d/bootlogd

/*启动日志:记录启动信息*/

#! /bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

DAEMON=/sbin/bootlogd

NAME=bootlogd

DESC="Bootlog daemon"

 

# source function library

. /etc/init.d/functions

 

test -f $DAEMON || exit 0

 

[ -r /etc/default/bootlogd ] && . /etc/default/bootlogd

 

## set -e # not needed

 

case "$BOOTLOGD_ENABLE" in

[Nn]*)

exit 0

;;

esac

 

STOPPER=

ACTION="$1"

case "$0" in

*stop-bootlog*)

STOPPER=Y

if [ "$ACTION" = start ]

then

ACTION=stop

fi

;;

esac

 

case "$ACTION" in

start)

[ "${VERBOSE}" != "no" ] && echo -n "Starting $DESC: "

if [ -d /proc/1/. ]

then

umask 027

start-stop-daemon --start --quiet \

--exec $DAEMON -- -r -c

else

$DAEMON -r -c

fi

[ "${VERBOSE}" != "no" ] && echo "$NAME."

;;

stop)

# stop may get called during bootup, so let it honor

# rcS VERBOSE setting

[ "${VERBOSE}" != "no" ] && echo -n "Stopping $DESC: "

start-stop-daemon --stop --quiet --exec $DAEMON

 

if [ "$STOPPER" ] && [ "$(which savelog 2>/dev/null)" ] && \

   [ -f /var/log/boot ] && [ -f /var/log/boot~ ]

then

cd /var/log

chgrp adm boot

savelog -p -c 5 boot > /dev/null 2>&1

mv boot.0 boot

mv boot~ boot.0

fi

 

[ "${VERBOSE}" != "no" ] && echo "$NAME."

;;

 restart|force-reload)

echo -n "Restarting $DESC: "

start-stop-daemon --stop --quiet --exec $DAEMON

sleep 1

start-stop-daemon --start --quiet --exec $DAEMON

echo "$NAME."

;;

status)

status $DAEMON

exit $?

;;

*)

N=${0##*/}

N=${N#[SK]??}

echo "Usage: $N {start|stop|status|restart|force-reload}" >&2

exit 1

;;

esac

exit 0

3.7 /etc/init.d/bootmisc.sh

#!/bin/sh

 

. /etc/default/rcS

# Put a nologin file in /etc to prevent people from logging in before

# system startup is complete.

if test "$DELAYLOGIN" = yes

then

  echo "System bootup in progress - please wait" > /etc/nologin

  cp /etc/nologin /etc/nologin.boot

fi

 

# Set pseudo-terminal access permissions.

if test -c /dev/ttyp0

then

chmod 666 /dev/tty[p-za-e][0-9a-f]

chown root:tty /dev/tty[p-za-e][0-9a-f]

fi

 

# Apply /proc settings if defined

SYSCTL_CONF="/etc/sysctl.conf"

if [ -f "${SYSCTL_CONF}" ]

then

if [ -x "/sbin/sysctl" ]

then

# busybox sysctl does not support -q

VERBOSE_REDIR="1>/dev/null"

if [ "${VERBOSE}" != "no" ]; then

VERBOSE_REDIR="1>&1"

fi

eval /sbin/sysctl -p "${SYSCTL_CONF}" $VERBOSE_REDIR

else

echo "To have ${SYSCTL_CONF} applied during boot, install package <procps>."

fi

fi

 

/*更新motd文件*/

/*motd即message of today(布告栏信息),每次用户登录时, motd文件的内容会显示在用户的终端*/

if test "$EDITMOTD" != no

then

uname -a > /etc/motd.tmp

sed 1d /etc/motd >> /etc/motd.tmp

mv /etc/motd.tmp /etc/motd

fi

/*使用硬件时钟设置系统时钟:如果timestamp更加接近当前时间,使用timestamp替代*/

test -x /etc/init.d/hwclock.sh && /etc/init.d/hwclock.sh start

if test -e /etc/timestamp

then

SYSTEMDATE=`date -u +%4Y%2m%2d%2H%2M%2S`

read TIMESTAMP < /etc/timestamp

if [ ${TIMESTAMP} -gt $SYSTEMDATE ]; then

# format the timestamp as date expects it (2m2d2H2M4Y.2S)

TS_YR=${TIMESTAMP%??????????}

TS_SEC=${TIMESTAMP#????????????}

TS_FIRST12=${TIMESTAMP%??}

TS_MIDDLE8=${TS_FIRST12#????}

date -u ${TS_MIDDLE8}${TS_YR}.${TS_SEC}

test -x /etc/init.d/hwclock.sh && /etc/init.d/hwclock.sh stop

fi

fi

: exit 0

 

3.8 /etc/init.d/checkroot.sh

#!/bin/sh

### BEGIN INIT INFO

# Provides:          checkroot

# Required-Start:    udev

# Required-Stop:     

# Default-Start:     S

# Default-Stop:

# Short-Description: Check to root file system.

### END INIT INFO

 

. /etc/default/rcS

 

# Set SULOGIN in /etc/default/rcS to yes if you want a sulogin to be spawned

# from this script *before anything else* with a timeout, like SCO does.

test "$SULOGIN" = yes && sulogin -t 30 $CONSOLE

 

# Read /etc/fstab.

exec 9< /etc/fstab

rootmode=rw

rootopts=rw

rootcheck=$ENABLE_ROOTFS_FSCK

swap_on_md=no

devfs=

while read fs mnt type opts dump pass junk <&9

do

case "$fs" in

""|\#*)

continue;

;;

/dev/md*)

# Swap on md device.

test "$type" = swap && swap_on_md=yes

;;

/dev/*)

;;

*)

# Might be a swapfile.

test "$type" = swap && swap_on_md=yes

;;

esac

test "$type" = devfs && devfs="$fs"

test "$mnt" != / && continue

rootopts="$opts"

test "$pass" = 0 -o "$pass" = "" && rootcheck=no

case "$opts" in

ro|ro,*|*,ro|*,ro,*)

rootmode=ro

;;

esac

done

exec 0>&9 9>&-

 

# Check for conflicting configurations

if [ "$rootmode" = "ro" -a "$ROOTFS_READ_ONLY" = "no" ] || \

[ "$rootmode" = "rw" -a "$ROOTFS_READ_ONLY" = "yes" ]; then

echo ""

echo "WARN: conflicting configurations in /etc/fstab and /etc/default/rcS"

echo "      regarding the writability of rootfs. Please fix one of them."

echo ""

fi

 

# Activate the swap device(s) in /etc/fstab. This needs to be done

# before fsck, since fsck can be quite memory-hungry.

test "$VERBOSE" != no && echo "Activating swap"

swapon -a 2> /dev/null

 

# Check the root filesystem.

if test -f /fastboot || test $rootcheck = no

then

  test $rootcheck = yes && echo "Fast boot, no filesystem check"

else

  # Ensure that root is quiescent and read-only before fsck'ing.

  mount -n -o remount,ro /

  if test $? = 0

  then

    if test -f /forcefsck

    then

force="-f"

    else

force=""

    fi

    if test "$FSCKFIX" = yes

    then

fix="-y"

    else

fix="-a"

    fi

    spinner="-C"

    case "$TERM" in

        dumb|network|unknown|"") spinner="" ;;

    esac

    test `uname -m` = s390 && spinner="" # This should go away

    test "$VERBOSE" != no && echo "Checking root filesystem..."

    fsck $spinner $force $fix /

    # If there was a failure, drop into single-user mode.

    # NOTE: "failure" is defined as exiting with a return code of

    # 2 or larger.  A return code of 1 indicates that filesystem

    # errors were corrected but that the boot may proceed.

    if test "$?" -gt 1

    then

      # Surprise! Re-directing from a HERE document (as in

      # "cat << EOF") won't work, because the root is read-only.

      echo

      echo "fsck failed.  Please repair manually and reboot.  Please note"

      echo "that the root filesystem is currently mounted read-only.  To"

      echo "remount it read-write:"

      echo

      echo "   # mount -n -o remount,rw /"

      echo

      echo "CONTROL-D will exit from this shell and REBOOT the system."

      echo

      # Start a single user shell on the console

      /sbin/sulogin $CONSOLE

      reboot -f

    fi

  else

    echo "*** ERROR!  Cannot fsck root fs because it is not mounted read-only!"

    echo

  fi

fi

 

# If the root filesystem was not marked as read-only in /etc/fstab,

# remount the rootfs rw but do not try to change mtab because it

# is on a ro fs until the remount succeeded. Then clean up old mtabs

# and finally write the new mtab.

mount -n -o remount,$rootmode /

if test "$rootmode" = rw

then

ln -sf /proc/mounts /dev/mtab

fi

: exit 0

3.9 /etc/init.d/dbus-1(消息总线系统)

D-Bus是一个消息总线系统用于应用程序进程之间的通信。如果你准备在不同的进程之间传递大量的数据,D-Bus可能不是最有效的方法,最有效的方法是使用共享内存,但是对共享内存的管理也是相当复杂的。

涉及文件:

/usr/bin/dbus-daemon;

/var/run/messagebus.pid;

/var/lib/dbus;

/etc/dbus-1/event.d;

/etc/default/dbus;

脚本内容:

#! /bin/sh

# Source function library.

. /etc/init.d/functions

 

DAEMON=/usr/bin/dbus-daemon

NAME=dbus

DAEMONUSER=messagebus           # must match /etc/dbus-1/system.conf

PIDFILE=/var/run/messagebus.pid # must match /etc/dbus-1/system.conf

UUIDDIR=/var/lib/dbus

DESC="system message bus"

EVENTDIR=/etc/dbus-1/event.d

 

test -x $DAEMON || exit 0

 

# Source defaults file; edit that file to configure this script.

ENABLED=1

PARAMS=""

if [ -e /etc/default/dbus ]; then

  . /etc/default/dbus

fi

 

test "$ENABLED" != "0" || exit 0

 

start_it_up()

{

  mkdir -p "`dirname $PIDFILE`"

  if [ -e $PIDFILE ]; then

    PIDDIR=/proc/$(cat $PIDFILE)

    if [ -d ${PIDDIR} -a  "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then

      echo "$DESC already started; not starting."

    else

      echo "Removing stale PID file $PIDFILE."

      rm -f $PIDFILE

    fi

  fi

 

  if [ ! -d $UUIDDIR ]; then

    mkdir -p $UUIDDIR

    chown $DAEMONUSER $UUIDDIR

    chgrp $DAEMONUSER $UUIDDIR

  fi

 

  dbus-uuidgen --ensure  

 

  echo -n "Starting $DESC: "

  start-stop-daemon -o --start --quiet --pidfile $PIDFILE \

    --user $DAEMONUSER --exec $DAEMON -- --system $PARAMS

  echo "$NAME."

  if [ -d $EVENTDIR ]; then

      run-parts --arg=start $EVENTDIR

  fi

}

 

shut_it_down()

{

  if [ -d $EVENTDIR ]; then

      # TODO: --reverse when busybox supports it

      run-parts --arg=stop $EVENTDIR

  fi

  echo -n "Stopping $DESC: "

  start-stop-daemon -o --stop  --quiet --pidfile $PIDFILE \

    --user $DAEMONUSER

  echo "$NAME."

  rm -f $PIDFILE

}

 

reload_it()

{

  echo -n "Reloading $DESC config: "

  dbus-send --print-reply --system --type=method_call \

            --dest=org.freedesktop.DBus \

            / org.freedesktop.DBus.ReloadConfig > /dev/null

  # hopefully this is enough time for dbus to reload it's config file.

  echo "done."

}

 

case "$1" in

  start)

    start_it_up

  ;;

  stop)

    shut_it_down

  ;;

  status)

    status $DAEMON

    exit $?

  ;;

  reload|force-reload)

    reload_it

  ;;

  restart)

    shut_it_down

    sleep 1

    start_it_up

  ;;

  *)

    echo "Usage: /etc/init.d/$NAME {start|stop|status|restart|reload|force-reload}" >&2

    exit 1

  ;;

esac

exit 0

 

3.9 /etc/init.d/devpts.sh

挂载devpts,为udev启动自动挂载设备做准备

#!/bin/sh

# Provides:          devpts

# Required-Start: udev

. /etc/default/devpts

 

if grep -q devpts /proc/filesystems

then

test -c /dev/ptmx || mknod -m 666 /dev/ptmx c 5 2

# Mount /dev/pts if needed.

if ! grep -q devpts /proc/mounts

then

mkdir -p /dev/pts

mount -t devpts devpts /dev/pts -ogid=${TTYGRP},mode=${TTYMODE}

fi

fi

 

3.10 /etc/init.d/dmesg.sh

#!/bin/sh

 

if [ -f /var/log/dmesg ]; then

if [ -f /usr/sbin/logrotate ]; then

logrotate -f /etc/logrotate-dmesg.conf

else

mv -f /var/log/dmesg /var/log/dmesg.old

fi

fi

dmesg -s 131072 > /var/log/dmesg

 

3.11 /etc/init.d/dropbear(SSH安全协议)

dropbear实现完整的SSH客户端和服务器版本2协议。

ssh(Secure Shell)安全外壳协议,SSH为建立在应用层和传输层基础上的安全协议。传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

涉及文件:

/usr/sbin/dropbear;

/var/run/dropbear.pid;

/etc/default/dropbear;

/var/service/dropbear;

脚本内容:

#!/bin/sh

# Do not configure this file. Edit /etc/default/dropbear instead!

 

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

DAEMON=/usr/sbin/dropbear

NAME=dropbear

DESC="Dropbear SSH server"

PIDFILE=/var/run/dropbear.pid

 

DROPBEAR_PORT=22

DROPBEAR_EXTRA_ARGS=

NO_START=0

 

set -e

test ! -r /etc/default/dropbear || . /etc/default/dropbear

test "$NO_START" = "0" || exit 0

test -x "$DAEMON" || exit 0

test ! -h /var/service/dropbear || exit 0

 

readonly_rootfs=0

for flag in `awk '{ if ($2 == "/") { split($4,FLAGS,",") } }; END { for (f in FLAGS) print FLAGS[f] }' </proc/mounts`; do

  case $flag in

   ro)

     readonly_rootfs=1

     ;;

  esac

done

 

if [ $readonly_rootfs = "1" ]; then

  mkdir -p /var/lib/dropbear

  DROPBEAR_RSAKEY_DEFAULT="/var/lib/dropbear/dropbear_rsa_host_key"

  DROPBEAR_DSSKEY_DEFAULT="/var/lib/dropbear/dropbear_dss_host_key"

else

  DROPBEAR_RSAKEY_DEFAULT="/etc/dropbear/dropbear_rsa_host_key"

  DROPBEAR_DSSKEY_DEFAULT="/etc/dropbear/dropbear_dss_host_key"

fi

 

test -z "$DROPBEAR_BANNER" || \

  DROPBEAR_EXTRA_ARGS="$DROPBEAR_EXTRA_ARGS -b $DROPBEAR_BANNER"

test -n "$DROPBEAR_RSAKEY" || \

  DROPBEAR_RSAKEY=$DROPBEAR_RSAKEY_DEFAULT

test -n "$DROPBEAR_DSSKEY" || \

  DROPBEAR_DSSKEY=$DROPBEAR_DSSKEY_DEFAULT

test -n "$DROPBEAR_KEYTYPES" || \

  DROPBEAR_KEYTYPES="rsa"

 

gen_keys() {

for t in $DROPBEAR_KEYTYPES; do

  case $t in

    rsa)

        if [ -f "$DROPBEAR_RSAKEY" -a ! -s "$DROPBEAR_RSAKEY" ]; then

                rm $DROPBEAR_RSAKEY || true

        fi

        test -f $DROPBEAR_RSAKEY || dropbearkey -t rsa -f $DROPBEAR_RSAKEY

;;

    dsa)

        if [ -f "$DROPBEAR_DSSKEY" -a ! -s "$DROPBEAR_DSSKEY" ]; then

                rm $DROPBEAR_DSSKEY || true

        fi

        test -f $DROPBEAR_DSSKEY || dropbearkey -t dss -f $DROPBEAR_DSSKEY

;;

  esac

done

}

 

case "$1" in

  start)

echo -n "Starting $DESC: "

gen_keys

KEY_ARGS=""

test -f $DROPBEAR_DSSKEY && KEY_ARGS="$KEY_ARGS -d $DROPBEAR_DSSKEY"

test -f $DROPBEAR_RSAKEY && KEY_ARGS="$KEY_ARGS -r $DROPBEAR_RSAKEY"

start-stop-daemon -S -p $PIDFILE \

  -x "$DAEMON" -- $KEY_ARGS \

    -p "$DROPBEAR_PORT" $DROPBEAR_EXTRA_ARGS

echo "$NAME."

;;

  stop)

echo -n "Stopping $DESC: "

start-stop-daemon -K -x "$DAEMON" -p $PIDFILE

echo "$NAME."

;;

  restart|force-reload)

echo -n "Restarting $DESC: "

start-stop-daemon -K -x "$DAEMON" -p $PIDFILE

sleep 1

KEY_ARGS=""

test -f $DROPBEAR_DSSKEY && KEY_ARGS="$KEY_ARGS -d $DROPBEAR_DSSKEY"

test -f $DROPBEAR_RSAKEY && KEY_ARGS="$KEY_ARGS -r $DROPBEAR_RSAKEY"

start-stop-daemon -S -p $PIDFILE \

  -x "$DAEMON" -- $KEY_ARGS \

    -p "$DROPBEAR_PORT" $DROPBEAR_EXTRA_ARGS

echo "$NAME."

;;

  *)

N=/etc/init.d/$NAME

echo "Usage: $N {start|stop|restart|force-reload}" >&2

exit 1

;;

esac

exit 0

 

3.12 /etc/init.d/gdbserverproxy(gdb调试)

在pc机上对在开发板上运行的程序进行调试

pc机上的gdb向开发板上的gdbserver发出命令,而开发板上的gdbserver就会向应用程序发出信号,使应用程序停下来或者完成其他一些工作!由此知道,pc机上要运行gdb,开发板上要运行gdbserver!

脚本内容:

#!/bin/bash

GDB_DEVICE_NAME='/dev/gdbtty$i'

DSP_FIRMWARE_NAME='/lib/firmware/dra7-dsp$[$i+1]-fw.xe66'

 

DSP_L2_GLOBAL_OFFSET="40000000"

DSP_L2_GLOBAL_SHIFT="00800000"

 

case "$1" in

  start)

    dsp_core_l2_offset=$DSP_L2_GLOBAL_OFFSET

    i=0

    while [ -c "`eval echo $GDB_DEVICE_NAME`" ]

    do

      dsp_firmware=`eval echo $DSP_FIRMWARE_NAME`

      if [ -f "`eval echo $DSP_FIRMWARE_NAME`" ]

      then

        eval echo "Initializing $GDB_DEVICE_NAME based on $DSP_FIRMWARE_NAME ..."

 

        gdb_data_local=`eval readelf -s "$DSP_FIRMWARE_NAME" | \

                        grep 'gdb_globalData' | \

                        awk '{print $2}'`

 

        echo "gdb_globalData (local)  = $gdb_data_local"

        printf "gdb_globalData (global) = %X\n" \

          $[0x$gdb_data_local + 0x$dsp_core_l2_offset]

 

        printf "%X\n" $[0x$gdb_data_local + 0x$dsp_core_l2_offset] \

          >> `eval echo $GDB_DEVICE_NAME`

      fi

      i=$[$i + 1]

      dsp_core_l2_offset=`printf "%X" $[0x$dsp_core_l2_offset + 0x$DSP_L2_GLOBAL_SHIFT]`

    done

  ;;

  stop)

    # Nothing to be done.

  ;;

  *)

    echo "Usage: $0 {start|stop}"

    exit 1

  ;;

esac

 

3.13 /etc/init.d/gplv3-notice

GPL(GNU通用公共许可证)。

 

3.14 /etc/init.d/halt

执行halt命令。

脚本内容:

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

# See if we need to cut the power.

if test -x /etc/init.d/ups-monitor

then

/etc/init.d/ups-monitor poweroff

fi

# Don't shut down drives if we're using RAID.

hddown="-h"

if grep -qs '^md.*active' /proc/mdstat

then

hddown=""

fi

halt -d -f -p $hddown

: exit 0

 

3.15 /etc/init.d/hostapd(WiFi_AP)

使用hostapd让电脑上的无线网卡工作在AP模式

#!/bin/sh

DAEMON=/usr/sbin/hostapd

NAME=hostapd

DESC="HOSTAP Daemon"

ARGS="/etc/hostapd.conf -B"

 

test -f $DAEMON || exit 0

set -e

case "$1" in

    start)

echo -n "Starting $DESC: "

start-stop-daemon -S -x $DAEMON -- $ARGS

echo "$NAME."

;;

    stop)

echo -n "Stopping $DESC: "

start-stop-daemon -K -x $DAEMON

echo "$NAME."

;;

    restart)

$0 stop

$0 start

;;

    reload)

echo -n "Reloading $DESC: "

killall -HUP $(basename ${DAEMON})

echo "$NAME."

;;

    *)

echo "Usage: $0 {start|stop|restart|reload}"

exit 1

;;

esac

exit 0

3.16 /etc/init.d/hostname.sh

设置主机名:在/etc/hostname基础之上设置主机名

#!/bin/sh

HOSTNAME=$(/bin/hostname)

 

hostname -b -F /etc/hostname 2> /dev/null

if [ $? -eq 0 ]; then

exit

fi

# Busybox hostname doesn't support -b so we need implement it on our own

if [ -f /etc/hostname ];then

hostname `cat /etc/hostname`

elif [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" -o ! -z "`echo $HOSTNAME | sed -n '/^[0-9]*\.[0-9].*/p'`" ] ; then

hostname localhost

fi

3.17 /etc/init.d/hwclock.sh

使用系统时钟设定与显示硬件时钟。

硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。

涉及文件:

/sbin/hwclock

脚本内容:

#!/bin/sh

[ ! -x /sbin/hwclock ] && exit 0

[ -f /etc/default/rcS ] && . /etc/default/rcS

 

[ "$UTC" = "yes" ] && tz="--utc" || tz="--localtime"

case "$1" in

        start)

                if [ "$VERBOSE" != no ]

                then

                        echo "System time was `date`."

                        echo "Setting the System Clock using the Hardware Clock as reference..."

                fi

 

if [ "$HWCLOCKACCESS" != no ]

then

if [ -z "$TZ" ]

then

                   hwclock $tz --hctosys

else

   TZ="$TZ" hwclock $tz --hctosys

fi

fi

                if [ "$VERBOSE" != no ]

                then

                        echo "System Clock set. System local time is now `date`."

                fi

                ;;

        stop|restart|reload|force-reload)

# Updates the Hardware Clock with the System Clock time.

# This will *override* any changes made to the Hardware Clock.

if [ "$VERBOSE" != no ]

then

echo "Saving the System Clock time to the Hardware Clock..."

fi

if [ "$HWCLOCKACCESS" != no ]

then

hwclock $tz --systohc

fi

if [ "$VERBOSE" != no ]

then

echo "Hardware Clock updated to `date`."

fi

                exit 0

                ;;

show)

if [ "$HWCLOCKACCESS" != no ]

then

hwclock $tz --show

fi

;;

        *)

     echo "Usage: hwclock.sh {start|stop|show|reload|restart}" >&2

echo "start sets kernel (system) clock from hardware (RTC) clock" >&2

echo "stop and reload set hardware (RTC) clock from kernel (system) clock" >&2

     exit 1

     ;;

esac

 

3.18 /etc/init.d/inetd.busybox

该脚本启动或停止inetd守护进程。

inetd介绍见文档:《am335x msp700根文件加载过程》

 

3.19 /etc/init.d/lighttpd(Web服务器)

该脚本启动或停止lighttpd开源的web服务器软件。

Lighttpd 是一个德国人领导的开源Web服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销、cpu占用率低。Apache之所以流行,很大程度也是因为功能丰富。

Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让网络用户浏览,可以放置数据文件,提供下载。

涉及文档:

/usr/sbin/lighttpd;

/etc/lighttpd.conf;

--- /etc/init.d/thttpd(Web服务器)

thttpd是一个非常小巧的轻量级web server,它非常非常简单,仅仅提供了HTTP/1.1和简单的CGI支持。此外,thttpd 也类似于lighttpd,对于并发请求不使用fork()来派生子进程处理,而是采用多路复用(Multiplex)技术来实现。thttpd较为引人注目的特点:基于URL的文件流量限制,这对于下载的流量控制而言是非常方便的。

涉及文档:

/usr/sbin/thttpd;

/srv/www/;

 

3.20 /etc/init.d/matrix-gui-2.0(应用)

该脚本启动或停止matrix-gui-2.0应用。

涉及文档:

/usr/bin/matrix_browser;

/var/run/matrix-gui-2.0.pid;

该sh文件启动了Damo板上界面显示的所有信息,应用程序在目录/usr/share/matrix-gui-2.0。

相关说明:http://processors.wiki.ti.com/index.php/Matrix_Users_Guide

 

 

3.21 /etc/init.d/modutils.sh

检测与加载驱动模块。

文档:《am335x msp700根文件加载过程》

 

3.22 /etc/init.d/mountall.sh

#!/bin/sh

. /etc/default/rcS

 

# Mount local filesystems in /etc/fstab. For some reason, people

# might want to mount "proc" several times, and mount -v complains

# about this. So we mount "proc" filesystems without -v.

test "$VERBOSE" != no && echo "Mounting local filesystems..."

mount -at nonfs,nosmbfs,noncpfs 2>/dev/null

 

# We might have mounted something over /dev, see if /dev/initctl is there.

if test ! -p /dev/initctl

then

rm -f /dev/initctl

mknod -m 600 /dev/initctl p

fi

kill -USR1 1

 

# Execute swapon command again, in case we want to swap to

# a file on a now mounted filesystem.

swapon -a 2> /dev/null

: exit 0

 

3.23 /etc/init.d/mountnfs.sh

挂载nfs、smbfs、mcpfs、cifs,或者还设置启动rpcbind即RPC服务。

RPC服务,主要是在nfs共享时候负责通知客户端,服务器的nfs端口号的。简单理解rpc就是一个中介服务。

--- /etc/init.d/rpcbind

涉及文档:

/usr/sbin/rpcbind;

/etc/default/rpcbind;

/etc/rpcbind.conf;

 

3.24 /etc/init.d/networking(???)

3.25 /etc/init.d/nfscommon

NFS服务支持。

涉及文档:

/usr/sbin/rpc.statd;

/var/run/rpc.statd.pid;

/var/lib/nfs;

 

3.26 /etc/init.d/ofono(工具)

启动或停止ofono应用工具。

通过bluez和ofono实现蓝牙的各种功能:蓝牙耳机、蓝牙GPS、蓝牙上网等等。

通过phonesim和ofono实现模拟电话:打电话功能。如果手上没有3G modem的话,可以装phonesim电话模拟器。配置成功就可以打电话了。

涉及文档:

/usr/sbin/ofonod;

/var/run/ofonod.pid;

/etc/default/ofono;

 

3.27 /etc/init.d/populate-volatile.sh(???)

 

 

3.28 /etc/init.d/psplash(进度条)

开机界面设置程序,Splash screen、U-boot Splash 、psplash 、X splash等是用在不同的阶段。

#!/bin/sh

read CMDLINE < /proc/cmdline

for x in $CMDLINE; do

        case $x in

        psplash=false)

echo "Boot splashscreen disabled"

exit 0;

                ;;

        esac

done

 

export TMPDIR=/mnt/.psplash

mount tmpfs -t tmpfs $TMPDIR -o,size=40k

 

rotation=0

if [ -e /etc/rotation ]; then

read rotation < /etc/rotation

fi

/usr/bin/psplash --angle $rotation &

 

3.29 /etc/init.d/pvr-init

使用pvrsrvinit初始化图形驱动。

#!/bin/bash

case "$1" in

  start)

    echo "Initializing the graphics driver ..."

    pvrsrvinit

  ;;

  stop)

    # Nothing to be done.

  ;;

  *)

    echo "Usage: $0 {start|stop}"

    exit 1

  ;;

esac

 

3.30 /etc/init.d/read-only-rootfs-hook.sh

#!/bin/sh

. /etc/default/rcS

[ "$ROOTFS_READ_ONLY" = "no" ] && exit 0

 

is_on_read_only_partition () {

DIRECTORY=$1

dir=`readlink -f $DIRECTORY`

while true; do

if [ ! -d "$dir" ]; then

echo "ERROR: $dir is not a directory"

exit 1

else

for flag in `awk -v dir=$dir '{ if ($2 == dir) { print "FOUND"; split($4,FLAGS,",") } }; \

END { for (f in FLAGS) print FLAGS[f] }' < /proc/mounts`; do

[ "$flag" = "FOUND" ] && partition="read-write"

[ "$flag" = "ro" ] && { partition="read-only"; break; }

done

if [ "$dir" = "/" -o -n "$partition" ]; then

break

else

dir=`dirname $dir`

fi

fi

done

[ "$partition" = "read-only" ] && echo "yes" || echo "no"

}

 

if [ "$1" = "start" ] ; then

if [ `is_on_read_only_partition /var/lib` = "yes" ]; then

grep -q "tmpfs /var/volatile" /proc/mounts || mount /var/volatile

mkdir -p /var/volatile/lib

cp -a /var/lib/* /var/volatile/lib

mount --bind /var/volatile/lib /var/lib

fi

fi

 

3.31 /etc/init.d/reboot

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

echo -n "Rebooting... "

reboot -d -f

 

3.32 /etc/init.d/rmnologin.sh

#!/bin/sh

 

if test -f /etc/nologin.boot

then

rm -f /etc/nologin /etc/nologin.boot

fi

: exit 0

 

3.33 /etc/init.d/rng-tools(安全)

rngd服务--熵值

生成随机数是密码学中的一项基本任务,是生成加密密钥、加密算法和加密协议所必不可少的,随机数的质量对安全性至关重要。Linux 的伪随机数生成器不满足鲁棒性的安全概念,没有正确积累熵。

涉及文件:

/usr/sbin/rngd;

/etc/default/rng-tools;

 

3.34 /etc/init.d/sendsigs

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

 

# Kill all processes.

echo "Sending all processes the TERM signal..."

killall5 -15

sleep 5

echo "Sending all processes the KILL signal..."

killall5 -9

: exit 0

 

3.35 /etc/init.d/single

杀死所有处理,进入单用户模式

#!/bin/sh

PATH="/sbin:/bin:/usr/sbin:/usr/bin"

 

# Kill all processes.

echo "Sending all processes the TERM signal..."

killall5 -15

sleep 5

echo "Sending all processes the KILL signal..."

killall5 -9

# We start update here, since we just killed it.

test -x /sbin/update && update

 

echo "Entering single-user mode..."

exec init -t1 S

 

3.36 /etc/init.d/stop-bootlogd

bootlogd

/*启动日志,可以删掉。*/

 

3.37 /etc/init.d/sysfs.sh

#!/bin/sh

 

if [ -e /proc ] && ! [ -e /proc/mounts ]; then

  mount -t proc proc /proc

fi

if [ -e /sys ] && grep -q sysfs /proc/filesystems && ! [ -e /sys/class ]; then

  mount -t sysfs sysfs /sys

fi

if [ -e /sys/kernel/debug ] && grep -q debugfs /proc/filesystems; then

  mount -t debugfs debugfs /sys/kernel/debug

fi

 

3.38 /etc/init.d/syslog

/etc/init.d/syslog.busybox

--- /etc/init.d/syslog.busybox

涉及命令:

syslogd:可以负责记录系统运作中,kernel或应用程式产生的各种讯息。这些讯息被写入到系统的纪录档中,让管理人员,进行故障排除、追踪尝试非法入侵的使用者、进行使用者的分析等等。

klogd:是一个专门截获并记录 Linux 内核消息的守护进程。

涉及文件:

/etc/syslog-startup.conf;

/sbin/syslogd;

/sbin/klogd;

 

3.39 /etc/init.d/telnetd(远程访问)

一个linux下非常好用的telnet服务器,通过它可以远程访问终端,就像本地操作一样方便。

涉及文件:

/usr/sbin/telnetd;

/var/run/telnetd.pid;

 

3.40 /etc/init.d/thermal-zone-init

#!/bin/sh

case "$1" in

    start )

        echo "Enabling thermal zones..."

        for i in /sys/class/thermal/thermal_zone*/mode; do

            echo enabled > $i

        done

    ;;

    stop )

        echo "Disabling thermal zones..."

        for i in /sys/class/thermal/thermal_zone*/mode; do

            echo disabled > $i

        done

    ;;

esac

exit 0

 

3.41 /etc/init.d/tiipclad-daemon.sh

#! /bin/sh

tiipclad_daemon=/usr/bin/lad_dra7xx

tiipclad_params="-g -l lad.txt"

 

test -x "$tiipclad_daemon" || exit 0

case "$1" in

  start)

    echo -n "Starting tiipclad daemon"

    start-stop-daemon --start --quiet \

        --exec $tiipclad_daemon -- $tiipclad_params

    echo "."

    ;;

  stop)

    echo -n "Stopping tiipclad daemon"

    start-stop-daemon --stop --quiet --pidfile /var/run/tiipclad.pid

    echo "."

    ;;

  *)

    echo "Usage: /etc/init.d/tiipclad-daemon.sh {start|stop}"

    exit 1

esac

 

exit 0

 

3.42 /etc/init.d/udev

 

--- /etc/init.d/udev-cache

 

3.43 /etc/init.d/uim-sysfs(工具)

#! /bin/sh

 

NODE=`cd /sys; find . | grep kim | grep install`

if [ $NODE ]

then

    echo UIM SYSFS Node Found at /sys/$NODE

else

    echo UIM SYSFS Node Not Found

    exit 0

fi

 

uim="/usr/bin/uim"

uim_args="-f `dirname /sys/$NODE`"

test -x "$uim" || exit 0

case "$1" in

  start)

    echo -n "Starting uim-sysfs daemon"

    start-stop-daemon --start --quiet --pidfile /var/run/uim.pid --make-pidfile --exec $uim -- $uim_args &

    echo "."

    ;;

  stop)

    echo -n "Stopping uim-sysfs daemon"

    start-stop-daemon --stop --quiet --pidfile /var/run/uim.pid

    echo "."

    ;;

  *)

    echo "Usage: /etc/init.d/uim-sysfs {start|stop}"

    exit 1

esac

exit 0

 

3.44 /etc/init.d/umountfs

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

 

echo "Deactivating swap..."

swapoff-a  /*关闭系统交换分区,所有交换设备*/

 

# We leave /proc mounted.

echo "Unmounting local filesystems..."

grep -q /mnt/ram /proc/mounts && mount -o remount,ro /mnt/ram

mount -o remount,ro /

 

umount -f -a -r > /dev/null 2>&1

: exit 0

 

3.45 /etc/init.d/umountnfs.sh

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

 

# Write a reboot record to /var/log/wtmp before unmounting

halt -w

 

echo "Unmounting remote filesystems..."

test -f /etc/fstab && (

 

# Read through fstab line by line and unount network file systems

while read device mountpt fstype options

do

if test "$fstype" = nfs ||  test "$fstype" = smbfs ||  test "$fstype" = ncpfs || test "$fstype" = cifs

then

umount -f $mountpt

fi

done

) < /etc/fstab

: exit 0

 

3.46 /etc/init.d/urandom

产生随机数

 

3.47 /etc/init.d/weston(通信)

Wayland是一套display server与client间的通信协议,而Weston是Wayland compositor的参考实现。


4. /etc目录

ca-certificates目录:CA证书的配置Ubuntu上CA证书的配置可以通过工具ca-certificates来方便的进行。

avahi目录:零配置网络服务规范,是一种用于自动生成可用IP地址的网络技术,不需要额外的手动配置和专属的配置服务器。

bluetooth目录:蓝牙配置。

Bash-completion目录:自动补全这个功能是Bash自带的,但一般我们会安装bash-completion包来得到更好的补全效果,这个包提供了一些现成的命令补全脚本,一些基础的函数方便编写补全脚本,还有一个基本的配置脚本。

dbus-1目录:是一个消息总线系统,用于应用程序进程之间的通信。

default目录

depmod.d目录

dropbear目录:实现了完整的SSH客户端和服务器版本2协议。

fonts目录:允许每个用户进行个性化的配置,应用程序可以通过它访问字体。

gconf目录:???

iproute2目录:iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具。例如:ifconfig、route等。

ipsec.d目录:IPSec VPN即指采用IPSec协议来实现远程接入的一种VPN技术,IPSec全称为Internet Protocol Security, 用以提供公用和专用网络的端对端加密和验证服务。VPN(Virtual Private Network)虚拟专用网络,属于远程访问技术,简单地说就是利用公用网络架设专用网络。例如某公司员工出差到外地,他想访问企业内网的服务器资源,这种访问就属于远程访问。让外地员工访问到内网资源,利用VPN的解决方法就是在内网中架设一台VPN服务器。外地员工在当地连上互联网后,通过互联网连接VPN服务器,然后通过VPN服务器进入企业内网。为了保证数据安全,VPN服务器和客户机之间的通讯数据都进行了加密处理。

libnl目录:libnl是提供基于Linux内核的netlink协议的API的库的套件。Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。socket(), bind(), sendmsg(), recvmsg() 和 close()很容易地应用到 netlink socket。

lighttpd.d目录:Lighttpd 是一个德国人领导的开源Web服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。

modprobe.d目录

modules-load.d目录

my.cnf.d目录:/etc/my.cnf是默认的MySQL配置文件。应该对这个文件配置修改。

network目录

ofono目录:启动或停止ofono应用工具。

opkg目录: Opkg是一个轻量快速的套件管理系统,已成为嵌入式系统标准。常用于路由交换机嵌入式设备中,用来管理软件包的安装升级与下载

pam.d目录PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。

pango目录:Pango是一个开放源代码的自由函数库,用于高质量地渲染国际化的文字。

profile.d目录:/etc/profile.d/和/etc/profile两个文件都是设置环境变量文件的,/etc/profile是永久性的环境变量,是全局变量,/etc/profile.d/设置所有用户生效。/etc/profile.d/比/etc/profile好维护,不想要什么变量直接删除/etc/profile.d/下对应的shell脚本即可,不用像/etc/profile需要改动此文件。

pulse目录:Pulse是一套家族系列的软件,包含配置,管理或基于Eclipse的产品。嵌入式系统中不需要。

security目录网络安全技术及其协议AAA(授权/认证/计费),VPN(虚拟专用网络) and Firewall(包过滤/代理服务/状态检查)网络安全技术及其协议,包括了网络通信安全、信息在网络传输中的保密性和完整性、控制访问受限网域与敏感信息以及在公共网络如因特网上使用隐秘通讯。

skel目录:skel 是 skeleton 的缩写,每当你新建一个用户的时候 (通过 useradd 命令),/etc/skel 目录下的文件,都会原封不动的复制到新建用户的家目录下。不需要

ssl目录:SSL(Secure Sockets Layer安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。

strongswan.d目录: Strongswan 5.0.x在openSUSE 12.3+服务器上架设支ikev1/ikev2 的Ipsec VPN。适用于openSUSE、iOS、Android、Windows和其它Linux。

terminfo目录 terminfo代庞大的/etc/termcap文件来定制终端的外观和交互行为。

udev目录:挂载并生成dev目录所有设备。

udhcpc.d目录:动态主机配置协议是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。

xdg目录:XDG桌面入口配置文件。

 

5. /boot目录

由mmcboot命令可知启动:

1)由uboot mmcboot启动时环境变量可知: 根文件系统中需要/boot目录,且包含文件zImage和.dtb。

2)网络启动时不需要根文件系统中/boot。

3)需要对应的uboot版本中支持/boot目录加载。

bootpart=0:2; loadaddr=0x82000000; fdtaddr=0x88000000;

bootdir=/boot; bootfile=zImage; fdtfile=undefined

loadfdt=load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile};

loadimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile};

 

6./usr目录

/usr/arm-linux-gnueabi:里面有个bin目录,存放几个指令。à删除

/usr/bin:  à保留,可以删除不用命令   (内容过多)

/usr/sbin: à保留,可以删除不用命令

/usr/games:空目录。à删除

/usr/include: 头文件。存放了各种使用服务或库的头文件,嵌入式系统中可以直接删除该内容,程序运行不需要。à删除

/usr/lib:存放常用动态链接共享库、静态档案库;à保留,部分实用功能库

/usr/share:其中放置的是一些共享数据。 à保留,实用功能/删除无用功能

/usr/src:Linux源代码。嵌入式系统中直接删除该内容。à删除

 

7./lib目录

 

 

 

8./opt目录

 

 

 

9./srv目录

 

 

 

10./var目录

 

 

 

11./www目录

 

 

 

12. /bin,/sbin,/usr/bin,/usr/sbin目录

部分无需使用命令可以删除。

 

13.空目录:/dev,/home,/include,/media,/mnt,/proc,/run,/sys,/tmp.

 

 

 

 

0 0
原创粉丝点击