android 初始化语言,Android Init Language(安卓初始化语言)
android源碼學(xué)習(xí)目錄
了解Android init進(jìn)程的都知道,啟動(dòng) init進(jìn)程之前會(huì)解析init.rc文件,init.rc是Android的配置文件腳本,它由一種被稱為"Android初始化語(yǔ)言"--Android init Language 編寫。
1. android init language(簡(jiǎn)稱 AIL)組成
動(dòng)作--(Actions)
命令--(Commands)
服務(wù)--(Services)
選項(xiàng)--(Options)
2. 語(yǔ)法特性
AIL是面向行的代碼,也就是每一行是一條語(yǔ)句,回車就是分隔符,一個(gè)語(yǔ)句包含若干個(gè)tokens, token之間需要有空格分割符,如果token中有空格需要通過(guò)c語(yǔ)言風(fēng)格的反斜杠('\')來(lái)轉(zhuǎn)義,或者使用雙引號(hào)將整個(gè)token包裹起來(lái)。反斜杠出現(xiàn)在末尾表示下一行任屬于當(dāng)前語(yǔ)句。
以#開(kāi)始的行為注釋,
AIL編寫分成多個(gè)(Section), 每個(gè)部分的開(kāi)頭需要指定Actions或Services,也就是每個(gè)Actions和Services都是一個(gè)Section,所有的Commands和Options只能屬于定義的這個(gè)Section,
Actions和Services的名稱必須唯一,如果多個(gè)一樣的名字,后面聲明的將被忽略為一個(gè)錯(cuò)誤。
3. Actions
Actions是被命名的命令(command)序列,由觸發(fā)器來(lái)決定這個(gè)actions什么時(shí)候發(fā)生,當(dāng)一個(gè)時(shí)間觸發(fā)了一個(gè)符合的action觸發(fā)器,這個(gè)action就會(huì)被添加到處理隊(duì)列尾部(它已經(jīng)存在在對(duì)列除外)。
在處理隊(duì)列中沒(méi)一個(gè)action都按照排序出列,action中的command也按照順序執(zhí)行,
Actions的結(jié)構(gòu)
on
?
?
?
如上:Actions以關(guān)鍵字 on 開(kāi)頭,然后跟一個(gè)觸發(fā)器,接下來(lái)是若干命令。
觸發(fā)器
觸發(fā)器是一個(gè)字符串,用于匹配特定的事件,
#這個(gè)是boot觸發(fā)器, 下面三行是command
on boot
ifup lo
hostname localhost
domainname localdomain
4.Services
服務(wù)是初始化程序init需要啟動(dòng)的一些程序,初始化程序可能在這些程序退出后重啟他們
Services的形式
service [ ] *
?
?
5.Options
選項(xiàng)屬于服務(wù),它將影響初始化程序運(yùn)行服務(wù)的時(shí)機(jī)和方法。可能的選項(xiàng)如下
選項(xiàng)
說(shuō)明
disabled
此服務(wù)不會(huì)自動(dòng)從其類啟動(dòng)。它必須按名稱顯式啟動(dòng)。
socket [ [ ] ]
創(chuàng)建一個(gè)名為/dev/socket/的unix域套接字,并將其fd傳遞給啟動(dòng)的進(jìn)程。有效的值包括dgram和stream。用戶和組默認(rèn)為0。
user
在執(zhí)行此服務(wù)之前更改為用戶名。當(dāng)前默認(rèn)為root
group [ ]*
在執(zhí)行此服務(wù)之前更改為groupname。第一個(gè)組之外的其他組名(這是必需的)用于設(shè)置進(jìn)程的其他組(使用set groups())。當(dāng)前默認(rèn)為root
capability [ ]+
在執(zhí)行此服務(wù)之前設(shè)置linux功能
class
指定服務(wù)的類名。命名類中的所有服務(wù)必須一起啟動(dòng)和停止。如果服務(wù)不是通過(guò)類選項(xiàng)指定的,則將其視為類“默認(rèn)”。
oneshot
退出時(shí)不要重新啟動(dòng)服務(wù)。
6.觸發(fā)器
上文中介紹過(guò)觸發(fā)器,這里列舉init.rc有的幾個(gè)
觸發(fā)器
功能
boot
這是init啟動(dòng)時(shí)(加載/init.conf之后)發(fā)生的第一個(gè)觸發(fā)器。
=
當(dāng)屬性設(shè)置為特定值時(shí),會(huì)觸發(fā)此觸發(fā)器
device-added-device-removed-
當(dāng)添加或刪除設(shè)備節(jié)點(diǎn)時(shí),會(huì)觸發(fā)這些觸發(fā)器。
service-exited-
當(dāng)指定服務(wù)退出時(shí),將觸發(fā)這些觸發(fā)器。
7.指令--Commands
command是Actions的一部分,用于執(zhí)行一條命名
command
說(shuō)明
exec [ ]*
創(chuàng)建并執(zhí)行程序()。這將阻塞直到程序完成執(zhí)行。盡量避免執(zhí)行。與內(nèi)置命令不同的是,它會(huì)冒著讓init“卡住”的風(fēng)險(xiǎn)。
export
將全局環(huán)境中的環(huán)境變量設(shè)置為(執(zhí)行此命令后啟動(dòng)的所有進(jìn)程都將繼承該變量)。
ifup
使網(wǎng)絡(luò)接口在線。
import
解析init配置文件,擴(kuò)展當(dāng)前配置。導(dǎo)入文件
hostname
Set the host name.
class_start
如果指定類的所有服務(wù)尚未運(yùn)行,請(qǐng)啟動(dòng)它們。
class_stop
如果指定類的所有服務(wù)當(dāng)前正在運(yùn)行,請(qǐng)停止這些服務(wù)。
domainname
設(shè)置域名。
insmod
下載模塊到path
mkdir
Make a directory at .
mount [ ]*
嘗試在目錄中掛載已命名設(shè)備。它的格式可以是mtd@name,以便按名稱指定mtd塊設(shè)備。
setkey
-當(dāng)前未定義-
setprop
將系統(tǒng)屬性設(shè)置為。
setrlimit
為資源設(shè)置一個(gè)限制。
start
Start a service running if it is not already running.
symlink
用在處創(chuàng)建link。
write [ ]*
打開(kāi)path處文件,并使用write(2)向文件寫入一個(gè)或多個(gè)字符
8.配置屬性
初始化程序(Init)可以根據(jù)需要修改一些系統(tǒng)的屬性。
屬性
說(shuō)明
init.action
等于當(dāng)前正在執(zhí)行的操作的名稱,如果沒(méi)有,則為“”
init.command
等于正在執(zhí)行的命令,如果沒(méi)有,則為“”
init.svc.
服務(wù)的狀態(tài)("stopped", "running", or "restarting").
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的android 初始化语言,Android Init Language(安卓初始化语言)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 客快物流大数据项目(二十九):下载CDH
- 下一篇: android java 调试快捷键_A