海思/etc/init.d/rcS脚本解析

/etc/init.d/rcS源码如下:

#! /bin/sh

/bin/mount -a

for initscript in /etc/init.d/S[0-9][0-9]*
do
        if [ -x $initscript ] ;
        then
                echo "[RCS]: $initscript"
                $initscript
        fi
done

#! /bin/sh

参见https://blog.csdn.net/lyc417356935/article/details/51979485

shell中#一般表示注释的意思,所以很多时候认为#!也是注释,但实际上不是,和c语言中头文件一样是声明文件的路径。

#! /bin/sh 是指此脚本使用/bin/sh 来执行

#!是特殊的表示符,其后面跟的是解释此脚本的shell的路径,如果没有声明,则脚本将在默认的shell中执行,默认shell是由用户所在的系统定义为执行shell脚本。

/bin/mount -a

mount -a 就是重新加载fstab文件中的内容。

命令使用格式:mount [-fnrsvw] [-t vfstype] [-o options] device dir

-a:自动挂载所有支持自动挂载的设备;(定义在了/etc/fstab文件中,且挂载选项中有“自动挂载”功能)。

for initscript in /etc/init.d/S[0-9][0-9]*

这句话的意思是遍历/etc/init.d/下的以名称为S开头的,紧接着是数字0-9,再紧跟着还是数字0-9,再往后有多少字符不限制的文件。听起来比较费解,举几个例子就明白了:

1. S00 - 符合条件;

2. S99 - 符合条件;

3. S56 - 符合条件;

4. S0 - 不符合条件(S后必须是至少2个数字);

5. S000 - 符合条件;;

6. S999 - 符合条件;

7. S99A - 符合条件;

8. S0909 - 符合条件;

9. S - 不符合条件(S后边至少跟2个0-9其中之一的数字);

10. SA - 不符合条件(S后边必须跟0-9,其他的不行);

11. S0B - 不符合条件(虽然S0符合条件,但再下一个依然需要跟0-9其中之一的数字)。

实际/etc/init.d/rcS/下的内容如下:

~ # ls /etc/init.d/
S00devs     S01udev     S80network  S99app      rcS

也就是说initscript依次为S00devs、S01udev、S80network、S99app。

do
        if [ -x $initscript ] ;
        then
                echo "[RCS]: $initscript"
                $initscript
        fi
done

这段代码的意思是:依次检测$initscript,即S00devs、S01udev、S80network、S99app是否可执行,如果可执行,则给出提示,并且执行之;否则不执行。

至此,海思平台下的/etc/init.d/rcS就解析完了,内容相对比较简单。

猜你喜欢

转载自blog.csdn.net/phmatthaus/article/details/107045240
今日推荐