25.Android init language (安卓初始化語言)

目前在研究framework框架,AIL是Android初始化語言癞尚,以下是根據(jù)官方文檔進(jìn)行的翻譯有助于研究Android啟動過程:

Android初始化語言包含了四種類型的聲明:Actions(行動)、Commands(命令)罕偎、Services(服務(wù))和Options(選項(xiàng))尿孔。

所有這些都是以行為單位的滞项,各種記號由空格來隔開狈惫。C語言風(fēng)格的反斜杠號可用于在記號間插入空格睛蛛。雙引號也可用于防止字符串被空格分割成多個記號鹦马。行末的反斜杠用于折行胧谈。
注釋行以井號(#)開頭(允許以空格開頭)。
Actions和Services聲明一個新的分組荸频。所有的命令或選項(xiàng)都屬于最近申明的分組菱肖。位于第一個分組之前的命令或選項(xiàng)將會被忽略。
Actions和Services有唯一的名字旭从。如果有重名的情況稳强,第二個申明的將會被作為錯誤忽略场仲。(?退疫?渠缕?我們是否應(yīng)該以覆蓋來代替忽略)

Actions(行動)

Actions其實(shí)就是一序列的Commands(命令)。Actions都有一個trigger(觸發(fā)器)褒繁,它被用于決定action的執(zhí)行時間亦鳞。當(dāng)一個符合action觸發(fā)條件的事件發(fā)生時,action會被加入到執(zhí)行隊(duì)列的末尾棒坏,除非它已經(jīng)在隊(duì)列里了燕差。
隊(duì)列中的每一個action都被依次提取出,而這個action中的每個command(命令)都將被依次執(zhí)行坝冕。Init在這些命令的執(zhí)行期間還控制著其他的活動(設(shè)備節(jié)點(diǎn)的創(chuàng)建和注銷徒探、屬性的設(shè)置、進(jìn)程的重啟)喂窟。

Actions的形式如下:

on

Services(服務(wù))

Services(服務(wù))是一個程序测暗,他在初始化時啟動,并在退出時重啟(可選)谎替。Services(服務(wù))的形式如下:

service [ ]*

Options(選項(xiàng))

Options(選項(xiàng))是一個Services(服務(wù))的修正者偷溺。他們影響Services(服務(wù))在何時,并以何種方式運(yùn)行钱贯。

critical(關(guān)鍵)
說明這是一個對于設(shè)備關(guān)鍵的服務(wù)挫掏。如果他四分鐘內(nèi)退出大于四次,系統(tǒng)將會重啟并進(jìn)入recovery(恢復(fù))模式秩命。

disabled(失效)
說明這個服務(wù)不會同與他同trigger(觸發(fā)器)下的服務(wù)自動啟動尉共。他必須被明確的按名啟動。

setenv (設(shè)置環(huán)境變量)
在進(jìn)程啟動時將環(huán)境變量設(shè)置為弃锐。

socket [ [ ] ]
創(chuàng)建一個Uinx域的名為/dev/socket/ 的套接字袄友,并傳遞它的文件描述符給已啟動的進(jìn)程。 必須是 "dgram"或"stream"霹菊。User 和 group默認(rèn)為0剧蚣。

user
在啟動這個服務(wù)前改變該服務(wù)的用戶名。此時默認(rèn)為root旋廷。(鸠按??饶碘?有可能的話應(yīng)該默認(rèn)為nobody)目尖。當(dāng)前,如果你的進(jìn)程要求Linux capabilities(能力)扎运,你無法使用這個命令瑟曲。即使你是root饮戳,你也必須在程序中請求capabilities(能力)。然后降到你想要的uid洞拨。

group [ ]*
在啟動這個服務(wù)前改變該服務(wù)的組名扯罐。除了(必需的)第一個組名,附加的組名通常被用于設(shè)置進(jìn)程的補(bǔ)充組(通過setgroups())烦衣。此時默認(rèn)為root篮赢。(?琉挖?启泣?有可能的話應(yīng)該默認(rèn)為nobody)。

oneshot
服務(wù)退出時不重啟示辈。

class
指定一個服務(wù)類寥茫。所有同一類的服務(wù)可以同時啟動和停止。如果不通過class選項(xiàng)指定一個類矾麻,則默認(rèn)為"default"類服務(wù)纱耻。

onrestart
當(dāng)服務(wù)重啟,執(zhí)行一個命令(下詳)险耀。

Triggers(觸發(fā)器)

Triggers(觸發(fā)器)是一個用于匹配特定事件類型的字符串弄喘,用于使Actions(行動)發(fā)生。

boot
這是init執(zhí)行后的第一個被觸發(fā)的Triggers(觸發(fā)器)甩牺。(在 /init.conf (啟動配置文件)被裝載之后)

=
這種形式的Triggers(觸發(fā)器)會在屬性被設(shè)置為指定的時被觸發(fā)蘑志。

device-added-
device-removed-
這種形式的Triggers(觸發(fā)器)會在一個設(shè)備節(jié)點(diǎn)文件被增刪時觸發(fā)。

service-exited-
這種形式的Triggers(觸發(fā)器)會在一個特定的服務(wù)退出時觸發(fā)贬派。

Commands(命令)

exec [ ]*
創(chuàng)建和執(zhí)行一個程序()急但。在程序完全執(zhí)行前,init將會阻塞搞乏。由于它不是內(nèi)置命令波桩,應(yīng)盡量避免使用exec,它可能會引起init卡死请敦。(??? 是否需要一個超時設(shè)置?)

export
在全局環(huán)境變量中設(shè)在環(huán)境變量 為镐躲。(這將會被所有在這命令之后運(yùn)行的進(jìn)程所繼承)

ifup
啟動網(wǎng)絡(luò)接口

import
解析一個init配置文件,擴(kuò)展當(dāng)前配置侍筛。

hostname
設(shè)置主機(jī)名萤皂。

chmod
更改文件訪問權(quán)限。

chown
更改文件的所有者和組勾笆。

class_start
啟動所有指定服務(wù)類下的未運(yùn)行服務(wù)敌蚜。

class_stop
停止指定服務(wù)類下的所有已運(yùn)行的服務(wù)桥滨。

domainname
設(shè)置域名窝爪。

insmod
加載中的模塊弛车。

mkdir [mode] [owner] [group]
創(chuàng)建一個目錄,可以選擇性地指定mode蒲每、owner以及group纷跛。如果沒有指定,默認(rèn)的權(quán)限為755邀杏,并屬于root用戶和root組贫奠。

mount

[ ]*
試圖在目錄掛載指定的設(shè)備。 可以是以 mtd@name 的形式指定一個mtd塊設(shè)備望蜡。包括 "ro"唤崭、"rw"、"remount"脖律、"noatime"谢肾、 ...

setkey
待完成......(暫時不可用)

setprop
設(shè)置系統(tǒng)屬性 為 值.

setrlimit
設(shè)置的rlimit(資源限制)。

start
啟動指定服務(wù)(如果此服務(wù)還未運(yùn)行)小泉。

stop
停止指定服務(wù)(如果此服務(wù)在運(yùn)行中)芦疏。

symlink
創(chuàng)建一個指向的軟連接。

sysclktz <mins_west_of_gmt>
設(shè)置系統(tǒng)時鐘基準(zhǔn)(0代表時鐘滴答以格林威治平均時(GMT)為準(zhǔn))

trigger
觸發(fā)一個事件微姊。用于將一個action與另一個 action排列酸茴。(?兢交?薪捍??配喳?)

write [ ]*
打開路徑為的一個文件飘诗,并寫入一個或多個字符串。

Properties(屬性)

Init更新一些系統(tǒng)屬性以提供對正在發(fā)生的事件的監(jiān)控能力:

init.action
此屬性值為正在被執(zhí)行的action的名字界逛,如果沒有則為""昆稿。

init.command
此屬性值為正在被執(zhí)行的command的名字,如果沒有則為""息拜。

init.svc.
名為的service的狀態(tài)("stopped"(停止), "running"(運(yùn)行), "restarting"(重啟))

init.conf實(shí)例

# not complete -- just providing some examples of usage  
#  
on boot  
   export PATH /sbin:/system/sbin:/system/bin  
   export LD_LIBRARY_PATH /system/lib

   mkdir /dev  
   mkdir /proc  
   mkdir /sys

   mount tmpfs tmpfs /dev  
   mkdir /dev/pts  
   mkdir /dev/socket  
   mount devpts devpts /dev/pts  
   mount proc proc /proc  
   mount sysfs sysfs /sys

   write /proc/cpu/alignment 4

   ifup lo

   hostname localhost  
   domainname localhost

   mount yaffs2 [mtd@system](http://blog.163.com/kissinger_1984/blog/static/168992520099121305590/mtd@system) /system  
   mount yaffs2 [mtd@userdata](http://blog.163.com/kissinger_1984/blog/static/168992520099121305590/mtd@userdata) /data

   import /system/etc/init.conf

   class_start default

service adbd /sbin/adbd  
   user adb  
   group adb

service usbd /system/bin/usbd -r  
   user usbd  
   group usbd  
   socket usbd 666

service zygote /system/bin/app_process -Xzygote /system/bin --zygote  
   socket zygote 666

service runtime /system/bin/runtime  
   user system  
   group system

on device-added-/dev/compass  
   start akmd

on device-removed-/dev/compass  
   stop akmd

service akmd /sbin/akmd  
   disabled  
   user akmd  
   group akmd

調(diào)試記錄

在默認(rèn)情況下溉潭,程序在被init執(zhí)行時會將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤都重定向到/dev/null(丟棄)。若你想要獲得調(diào)試信息少欺,你可以通過Andoird系統(tǒng)中的logwrapper程序執(zhí)行你的程序喳瓣。它會將標(biāo)準(zhǔn)輸出/標(biāo)準(zhǔn)錯誤都重定向到Android日志系統(tǒng)(通過logcat訪問)。

例如:

service akmd /system/bin/logwrapper /sbin/akmd

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赞别,一起剝皮案震驚了整個濱河市畏陕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌仿滔,老刑警劉巖惠毁,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犹芹,死亡現(xiàn)場離奇詭異,居然都是意外死亡鞠绰,警方通過查閱死者的電腦和手機(jī)腰埂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜈膨,“玉大人屿笼,你說我怎么就攤上這事∥涛。” “怎么了驴一?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長灶壶。 經(jīng)常有香客問我蛔趴,道長,這世上最難降的妖魔是什么例朱? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任孝情,我火速辦了婚禮,結(jié)果婚禮上洒嗤,老公的妹妹穿的比我還像新娘箫荡。我一直安慰自己,他們只是感情好渔隶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布羔挡。 她就那樣靜靜地躺著,像睡著了一般间唉。 火紅的嫁衣襯著肌膚如雪绞灼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天呈野,我揣著相機(jī)與錄音低矮,去河邊找鬼。 笑死被冒,一個胖子當(dāng)著我的面吹牛军掂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昨悼,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼蝗锥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了率触?” 一聲冷哼從身側(cè)響起终议,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后穴张,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體细燎,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年陆馁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片合愈。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出筹陵,到底是詐尸還是另有隱情闯参,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布寸莫,位于F島的核電站捺萌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏膘茎。R本人自食惡果不足惜桃纯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望披坏。 院中可真熱鬧态坦,春花似錦、人聲如沸棒拂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帚屉。三九已至谜诫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間攻旦,已是汗流浹背喻旷。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牢屋,地道東北人掰邢。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像伟阔,于是被迫代替她去往敵國和親辣之。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容