Android init.rc腳本解析

Android init.rc(android init language)

android初始化語言由四大類聲明組成:行爲類(Actions),命令類(Commands),服務類(Services),選項類(Options)

Actions和Services隱含聲明一個新的段落(Section)。所有該段落下Commands和Options的聲明都屬於該段落。

一.行爲類(Actions)

Actions擁有一個觸發器(trigger)用來決定action何時執行。當一個action在符合觸發條件被執行時,如果它還沒加入到待執行隊列中,則加入到隊列最後

隊列中的action依次執行,action中的命令也依次執行。

Actions的表現形式爲:

 on <trigger>

       <command>

       <command>

       <command>

1.Triggers
Triggers(觸發器)是一個字符串,可以用來匹配某種類型的事件並執行一個 action。
boot

這是當 init 開始後執行的第一個觸發器(當/init.conf 被加載)

<name>=<value>
當 property <name>被設爲指定的值<value>時觸發。

device-added-<path>
device-removed-<path>
當設備節點被添加或移除時觸發。

service-exited-<name>
當指定的服務存在時觸發


2.命令類(Commands)
exec <path> [ <argument> ]*
Fork 並執行一個程序(<path>).這將被 block 直到程序執行完畢。最好避免執行例如內建命令以外的程序,它可能會導致 init 被阻塞不動。

export <name> <value>
設定全局環境變量<name>的值<value>,當這個命令執行後所有的進程都可以取得。

ifup <interface>
使網絡接口<interface>聯機。

import <filename>
解析一個 init 配置文件,擴展當前配置文件。

hostname <name>

設置主機名


chmod <octal-mode> <path>
改變文件訪問權限


chown <owner> <group> <path>
改變文件所屬和組


class_start <serviceclass>
當指定類別的服務沒有運行,啓動該類別所有的服務。


class_stop <serviceclass>
當指定類別的服務正在運行,停止該類別所有的服務。


domainname <name>
設置域名。


insmod <path>
加載該路徑<path>的模塊


mkdir <path> [mode] [owner] [group]
在<path>創建一個目錄,可選選項:mod,owner,group.如果沒有指定,目錄以 755 權限,owner 爲 root,group 爲 root 創建.


mount <type> <device> <dir> [ <mountoption> ]*
嘗試 mount <device>到目錄<dir>. <device>可以用 mtd@name 格式以命名指定一個 mtd塊設備。<mountoption>包含"ro","rw","remount","noatime"

setprop <name> <value>

設置系統 property <name>的值<value>.

setrlimit <resource> <cur> <max>
設置 resource 的 rlimit.

start <service>
啓動一個沒有運行的服務。

stop <service>
停止一個正在運行的服務。

symlink <target> <path>
創建一個<path>的符號鏈接到<target>

sysclktz <mins_west_of_gmt>
設置系統時區(GMT 爲 0)

trigger <event>
觸發一個事件。用於調用其它 action。

write <path> <string> [ <string> ]*
打開<path>的文件並寫入一個或多個字符串。


二.服務類(Services)

Services是由init啓動,在他們退出時重啓(可選)

Service表現形式爲:

service <name> <pathname> [<argument>]

        <option>

        <option>

        ...

選項類(Options)是Services的修飾,它們影響init何時,如何運行service

critical
這是一個設備關鍵服務(device-critical service) .如果它在 4 分鐘內退出超過 4次,設備將重啓並進入恢復模式

disabled
這個服務的級別將不會自動啓動,它必須被依照服務名指定啓動纔可以啓動

setenv <name> <value>
設置已啓動的進程的環境變量<name>的值<value>


socket <name> <type> <perm> [ <user> [ <group> ] ]
創建一個名爲/dev/socket/<name>的 unix domin socket,並傳送它的 fd 到已啓動的進程。<type>必須爲"dgram"或"stream".用戶和組默認爲 0.

user <username>
在執行服務前改變用戶名。當前默認爲 root.如果你的進程需要 linux 能力,你不能使用這個命令。你必須在還是 root 時請求能力,並下降到你需要的 uid.

group <groupname> [ <groupname> ]*
在執行服務前改變組。在第一個組後的組將設爲進程附加組(通過 setgroups()).當前默認爲 root.

oneshot
在服務退出後不重啓。


class <name>
爲 service 指定一個類別名。同樣類名的所有的服務可以一起啓動或停止。如果沒有指定類別的服務默認爲"default"類。

onrestart
當服務重啓時執行一個命令



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