Android初始化語言

來源:互聯網
上載者:User

Android初始化語言

init.rc 檔案並不是普通的設定檔,而是由一種被稱為“Android初始化語言”(Android Init Language,這裡簡稱為AIL)的指令碼寫成的檔案。

AIL由如下4部分組成:

1. 動作(Actions)

2. 命令(Commands)

3.服務(Services)

4. 選項(Options)

這4部分都是面向行的代碼,也就是說用斷行符號分行符號作為每一條語句的分隔字元。而每一行的代碼由多個符號(Tokens)表示。可以使用反斜線轉義符在 Token中插入空格。雙引號可以將多個由空格分隔的Tokens合成一個Tokens。如果一行寫不下,可以在行尾加上反斜線,來串連下一行。也就是說,可以用反斜線將多行代碼串連成一行代碼。

AIL的注釋與很多Shell指令碼一行,以#開頭。

AIL在編寫時需要分成多個部分(Section),而每一部分的開頭需要指定Actions或Services。也就是說,每一個Actions或 Services確定一個Section。而所有的Commands和Options只能屬於最近定義的Section。如果Commands和 Options在第一個Section之前被定義,它們將被忽略。

Actions和Services的名稱必須唯一。如果有兩個或多個Action或Service擁有同樣的名稱,那麼init在執行它們時將拋出錯誤,並忽略這些Action和Service。

下面來看看Actions、Services、Commands和Options分別應如何設定。

Actions的文法格式如下:

on

 

也就是說Actions是以關鍵字on開頭的,然後跟一個觸發器,接下來是若干命令。例如,下面就是一個標準的Action。

on boot

ifup lo

hostname localhost

domainname localdomain

其中boot是觸發器,下面三行是command

那麼init.rc到底支援哪些觸發器呢?目前init.rc支援如下5類觸發器。

1. boot

這是init執行後第一個被觸發Trigger,也就是在/init.rc被裝載之後執行該Trigger

2. =

當屬性被設定成時被觸發。例如,

on property:vold.decrypt=trigger_reset_main

class_reset main

3. device-added-

當裝置節點被添加時觸發

4. device-removed-

當裝置節點被移除時添加

5. service-exited-

會在一個特定的服務退出時觸發

Actions後需要跟若干個命令,這些命令如下:

1. exec [ ]*

建立和執行一個程式()。在程式完全執行前,init將會阻塞。由於它不是內建命令,應盡量避免使用exec ,它可能會引起init執行逾時。

2. export

在全域環境中將變數的值設為。(這將會被所有在這命令之後啟動並執行進程所繼承)

3. ifup

啟動網路介面

4. import

指定要解析的其他設定檔。常被用於當前設定檔的擴充

5. hostname

設定主機名稱

6. chdir

改變工作目錄

7. chmod

改變檔案的存取權限

8. chown

變更檔的所有者和組

9. chroot

改變處理根目錄

10. class_start

啟動所有指定服務類下的未運行服務。

11 class_stop

停止指定服務類下的所有已啟動並執行服務。

12. domainname

設定網域名稱

13. insmod

載入指定的驅動模組

14. mkdir [mode][owner] [group]

建立一個目錄,可以選擇性地指定mode、owner以及group。如果沒有指定,預設的許可權為755,並屬於root使用者和 root組。

15. mount

[ ]*

 

試圖在目錄

掛載指定的裝置。可以是mtd@name的形式指定一個mtd塊裝置。包括 ro、rw、re

 

16. setkey

保留,暫時未用

17. setprop

將系統屬性的值設為。

18. setrlimit

設定的rlimit (資源限制)

19. start

啟動指定服務(如果此服務還未運行)。

20.stop

停止指定服務(如果此服務在運行中)。

21. symlink

建立一個指向的軟串連。

22. sysclktz

設定系統時鐘基準(0代表時鐘滴答以格林威治平均時(GMT)為準)

23. trigger

觸發一個事件。用於Action排隊

24. wait [ ]

等待一個檔案是否存在,當檔案存在時立即返回,或到指定的逾時時間後返回,如果不指定,預設逾時時間是5秒。

25. write [ ]*

向指定的檔案寫入一個或多個字串。

Services (服務)是一個程式,他在初始化時啟動,並在退出時重啟(可選)。Services (服務)的形式如下:

service [ ]*

 

 

例如,下面是一個標準的Service用法

service servicemanager/system/bin/servicemanager

class core

user system

group system

critical

onrestart restartzygote

onrestart restartmedia

onrestart restartsurfaceflinger

onrestart restartdrm

Services的選項是服務的修飾符,可以影響服務如何以及怎樣運行。服務支援的選項如下:

1. critical

表明這是一個非常重要的服務。如果該服務4分鐘內退出大於4次,系統將會重啟並進入 Recovery (恢複)模式。

2. disabled

表明這個服務不會同與他同trigger(觸發器)下的服務自動啟動。該服務必須被明確的按名啟動。

3. setenv

在進程啟動時將環境變數設定為。

4. socket [ [ ] ]

Create a unix domainsocketnamed /dev/socket/ and pass

its fd to thelaunchedprocess. must bedgram,stream or seqpacket.

User and group default to0.

建立一個unix域的名為/dev/socket/的通訊端,並傳遞它的檔案描述符給已啟動的進程。 必須是 dgram,stream 或seqpacket。使用者和組預設是0。

5. user

在啟動這個服務前改變該服務的使用者名稱。此時預設為 root。

6. group [ ]*

在啟動這個服務前改變該服務的組名。除了(必需的)第一個組名,附加的組名通常被用於設定進程的補充組(通過setgroups函數),檔案預設是root。

7. oneshot

服務退出時不重啟。

8. class

指定一個服務類。所有同一類的服務可以同時啟動和停止。如果不通過class選項指定一個類,則預設為default類服務。

9. onrestart

當服務重啟,執行一個命

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.