海思/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就解析完了,內容相對比較簡單。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章