Embedded Linux: 如何讓海思Hi3518開機後自動執行Shell Script?

我目前正於海思平台上進行開發,芯片是Hi3518E,Linux的內核是使用海思SDK所提供的代碼去編譯,所以我想以下所說的,大概跟其他海思芯片是差不多的吧(既然是同一家公司的,工程師做的東西應該都差不多才對吧),不過還是以Hi3518為準~

已經了解了Hi3518一段時間,目前需要它於開機啟動時自動插入一些驅動和程序,所以小小研究了一下要怎麼做。首先,因為有一系列的指令要做,所以就給它寫了個Shell Script(腳本),讓它可以一次過運行我所有的指令,之後再放入Startup。至於Shell Script要怎麼寫,我暫時就不多說了,因為我知的也不多~ 哈哈~

0. 基礎知識

/etc/init.d/ : init.d 是一個用來存放Unix/Linux Shell Script的文件夾,如果你的內核有開啟 init.d 的話,系統啟動時,會在登入前自行執行存放在這裡的腳本。一般系統上所有服務的啟動腳本都會放在這裡,一般是Linux系統的話,應該都會看到它的蹤影。

/etc/init.d/rcS : rcS 是 init.d 下的一個腳本,它在這裡是規限了之後要執行哪些Shell Scripts。

所以放在/etc/init.d/裡的文件都不一定會自動執行,要附合rcS裡的條件才行!原因是其實系統啟動後是會先分析/etc/inittab之後再根據inittab去運行其他東西,打開inittab,你可以看到裡面有以下內容:

其實第一句就是要執行/etc/init.d/rcS了!

再打開/etc/init.d/rcS,就會查看到它會運行什麼腳本,之後會再詳細一點說。

 

在Hi3518E下檢視/etc/init.d/有以下結果:

Content of the directory /etc/init.d

Content of the directory /etc/init.d

 

1. 把Shell Script放到 /etc/init.d

cp /your_path/script_name /etc/init.d/

your_path是Script原本的路徑。
script_name是Script的名稱。

或是你也可以用vi這個簡單的文字編輯器去編寫一個shell script

vi /etc/init.d/script_name

2. 把你的腳本權限改成乭運行的

chmod +x /etc/init.d/script_name

3. 讓Shell Script在開機時自動執行

剛才提到,/etc/init.d/rcS規限了要執行的Scripts,所以我們就打開它看一下吧!
文件尾部有:

從這裡我們可以得知,系統其後只會運行名稱為「SnnXXXXX」的Scripts,其中 n 是任何數字(0 – 9)X 是任何字符,例如:S00devs、S01udev、S80network、S99config……

所以我們如果要讓它自動運行其他Scripts,那就得改一下rcS囉!不過,最簡單的方法,當然就是把你的Script名稱改成跟它一樣的格式囉~

cd /etc/init.d/
mv ./script_name ./S99script_name

重新啟動,你就應該會發現你的Script已經會自動執行了!
在我的系統,是會有類似以下的提示:

[RCS]: /etc/init.d/S00devs
[RCS]: /etc/init.d/S01udev
[RCS]: /etc/init.d/S80network

Comments

comments

Leave a Comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">