正如《Android開機啟動過程》一文中所講的,在Android中啟動system\core\rootdir\init.rc腳本后,系統(tǒng)的初始化過程中進行一些簡單的初始化操作。首先創(chuàng)建系統(tǒng)運行所需的各種環(huán)境變量,接著創(chuàng)建各種文件系統(tǒng)(如系統(tǒng)文件系統(tǒng)、用戶文件系統(tǒng)、SD Card、緩存(Cache)等)的掛載點,并將這些文件系統(tǒng)掛載到MTD(Memory Technology Device)上。
init.rc這個腳本被直接安裝到目標系統(tǒng)的根文件系統(tǒng)中,被 init可執(zhí)行程序解析。為了讓大家理解init.rc腳本,本文會對init.rc腳本的編寫做簡要的說明。在init.rc腳本中,有4種類型的命令方式,分別為"Actions"、"Commands"、"Services"和"Options"。
"Actions"的命令行參數(shù)如下:
on <trigger>
<command>
<command>
<command>
"Commands"的方法包括:
exec <path> [ <argument> ]* //創(chuàng)建進程
export <name> <value> //設置環(huán)境變量
ifup <interface> //激活網(wǎng)絡接口
import <filename> //導入配置文件
hostname <name> //設置主機名
chmod <octal-mode> <path> //改變文件權(quán)限
chown <owner> <group> <path> //改變文件歸屬
class_start <serviceclass> //啟動特定服務
class_stop <serviceclass> //停止特定服務
domainname <name> //設置守護進程名
insmod &l;tpath> //安裝共享庫
mkdir <path> [mode] [owner] [group] //創(chuàng)建路徑
mount <type> <device> <dir> [ &l;tmountoption> ]* //掛載文件系統(tǒng)
setkey //按鍵映射
setprop <name> <value> //設置系統(tǒng)屬性
setrlimit <resource> <cur> <max> //設置資源限制
start <service> //啟動服務
stop <service> //停止服務
symlink <target> <path> //創(chuàng)建符號鏈接
sysclktz <mins_west_of_gmt> //設置系統(tǒng)時區(qū)
trigger <event> //觸發(fā)事件
write <path> <string> [ <string> ]* //打開文件并寫入內(nèi)容
"Services"的命令行參數(shù)如下:
service <name> <pathname> [ <argument> ]*
<option>
<option>
...
"Options"為"services"的補充,其方法包括:
Critical //系統(tǒng)核心服務,可導致系統(tǒng)重啟
Disabled //服務必須顯式啟動
setenv <name> <value> //設置環(huán)境變量
socket <name> <type> <perm> [ <user> [ <group> ] ] //創(chuàng)建套接字
user <username> //改變用戶歸屬
group <groupname> [ <groupname> ]* //改變用戶歸屬
neshot //指明不能重啟服務
class <name> //指定服務的類名
onrestart //服務重啟時執(zhí)行命令
Triggers //觸發(fā)器
Boot //初始化過程的第一個觸發(fā)器
<name>=<value> //屬性觸發(fā)
device-added-<path> //設備添加時觸發(fā)
device-removed-<path> //設備移除時觸發(fā)
service-exited-<name> //當特定服務存在時觸發(fā)
init腳本的關(guān)鍵字可以參考init進程的system/core/init/keyword.h文件。
init.rc的使用方法,可以參考說明文件system/core/init/readme.txt
如果想要修改啟動過程只需要修改init.c(system/core/init)或者init.rc里的內(nèi)容即可.