1,init.rc是一個可配置的初始化文件,通常定制廠商可以配置額外的初始化配置,init.%PRODUCT%.rc
2,init.rc是在$GINGERBREAD/system/core/init/init.c中讀取的,它基於“行”,包含一些用空格隔開的關鍵字(它屬於特殊字符)
3,如果關鍵字中有空格,處理方法類似於C語言,使用/表示轉義,使用“”防止關鍵字被斷開,另外注意/在末尾表示換行
4,#開頭的表示注釋
5,init.rc包含4種狀態類別:Actions/Commands/Services/Options
6,當聲明一個service或者action的時候,它將隱式聲明一個section,它之后跟隨的command或者option都將屬於這個section
7,action和service不能重名,否則忽略為error
8,actions就是在某種條件下觸發一系列的命令,通常有一個trigger,形式如:
on <trigger>
<command>
<command>
9,service結構如下:
service <name> <pathname> [ <argument> ]*
<option>
<option>
10,option是service的修飾詞,主要包括:
critical
表示如果服務在4分鍾內存在多於4次,則系統重啟到recovery mode
disabled
表示服務不會自動啟動,需要手動調用名字啟動
setEnv <name> <value>
設置啟動環境變量
socket <name> <type> <permission> [<user> [<group>]]
開啟一個unix域的socket,名字為/dev/socket/<name> , <type>只能是dgram或者stream,<user>和<group>默認為0
user <username>
表示將用戶切換為<username>,用戶名已經定義好了,只能是system/root
group <groupname>
表示將組切換為<groupname>
oneshot
表示這個service只啟動一次
class <name>
指定一個要啟動的類,這個類中如果有多個service,將會被同時啟動。默認的class將會是“default”
onrestart
在重啟時執行一條命令
11,trigger主要包括:
boot
當/init.conf加載完畢時
<name>=<value>
當<name>被設置為<value>時
device-added-<path>
設備<path>被添加時
device-removed-<path>
設備<path>被移除時
service-exited-<name>
服務<name>退出時
12,命令主要包括:
exec <path> [ <argument> ]*
執行一個<path>指定的程序
export <name> <value>
設置一個全局變量
ifup <interface>
使網絡接口<interface>連接
import <filename>
引入其他的配置文件
hostname <name>
設置主機名
chdir <directory>
切換工作目錄
chmod <octal-mode> <path>
設置訪問權限
chown <owner> <group> <path>
設置用戶和組
chroot <directory>
設置根目錄
class_start <serviceclass>
啟動類中的service
class_stop <serviceclass>
停止類中的service
domainname <name>
設置域名
insmod <path>
安裝模塊
mkdir <path> [mode] [owner] [group]
創建一個目錄,並可以指定權限,用戶和組
mount <type> <device> <dir> [ <mountoption> ]*
加載指定設備到目錄下
<mountoption> 包括"ro", "rw", "remount", "noatime"
setprop <name> <value>
設置系統屬性
setrlimit <resource> <cur> <max>
設置資源訪問權限
start <service>
開啟服務
stop <service>
停止服務
symlink <target> <path>
創建一個動態鏈接
sysclktz <mins_west_of_gmt>
設置系統時鍾
trigger <event>
觸發事件
write <path> <string> [ <string> ]*
向<path>路徑的文件寫入多個<string>