android init.rc语法标准 .
Android 初始化語(yǔ)言由四大類聲明組成: 行為類(Actions), 命令類(Commands) ,服務(wù)類(Services), 選項(xiàng)類(Options).
? * 初始化語(yǔ)言以行為單位,由以空格間隔的語(yǔ)言符號(hào)組成。C 風(fēng)格的反斜杠轉(zhuǎn)義符可以用來(lái)插入空白到語(yǔ)言符號(hào)。雙引號(hào)也可以用來(lái)防止文本被空格分成多個(gè)語(yǔ)言符號(hào)。當(dāng)反斜杠在行末時(shí),作為折行符。
? * 以# 開(kāi)始( 前面允許有空格) 的行為注釋行。
? * Actions 和Services 隱含聲明一個(gè)新的段落。所有該段落下Commands 或Options 的聲明屬于該段落。第一段落前的Commands 或Options 被忽略。
? * Actions 和Services 擁有獨(dú)一無(wú)二的命名。在它們之后聲明相同命名的類將被當(dāng)作錯(cuò)誤并忽略。
Actions
-------
Actions 是一系列命令的命名。Actions 擁有一個(gè)觸發(fā)器(trigger) 用來(lái)決定action 何時(shí)執(zhí)行。當(dāng)一個(gè)action 在符合觸發(fā)條件被執(zhí)行時(shí),如果它還沒(méi)被加入到待執(zhí)行隊(duì)列中的話,則加入到隊(duì)列最后。
隊(duì)列中的action 依次執(zhí)行,action 中的命令也依次執(zhí)行。Init 在執(zhí)行命令的中間處理其它活動(dòng)( 設(shè)備創(chuàng)建/ 銷毀,property 設(shè)置,進(jìn)程重啟) 。
Actions 表現(xiàn)形式為:
on <trigger>
?? <command>
?? <command>
?? <command>
?
Services
--------
Services 是由init 啟動(dòng),在它們退出時(shí)重啟( 可選) 。Service 表現(xiàn)形式為:
service <name> <pathname> [ <argument> ]*
?? <option>
?? <option>
?? ...
??
Options
-------
Options 是Services 的修飾,它們影響init 何時(shí)、如何運(yùn)行service.
?
critical
???? 這是一個(gè)設(shè)備關(guān)鍵服務(wù)(device-critical service) . 如果它在4 分鐘內(nèi)退出超過(guò)4 次,設(shè)備將重啟并進(jìn)入恢復(fù)模式。
?
disabled
???? 這個(gè)服務(wù)的級(jí)別將不會(huì)自動(dòng)啟動(dòng),它必須被依照服務(wù)名指定啟動(dòng)才可以啟動(dòng)。
?
setenv <name> <value>
???? 設(shè)置已啟動(dòng)的進(jìn)程的環(huán)境變量<name> 的值<value>
?
socket <name> <type> <perm> [ <user> [ <group> ] ]
???? 創(chuàng)建一個(gè)名為/dev/socket/<name> 的unix domin socket ,并傳送它的fd 到已啟動(dòng)的進(jìn)程。<type> 必須為"dgram" 或"stream". 用戶和組默認(rèn)為0.
?
user <username>
???? 在執(zhí)行服務(wù)前改變用戶名。當(dāng)前默認(rèn)為root. 如果你的進(jìn)程需要linux 能力,你不能使用這個(gè)命令。你必須在還是root 時(shí)請(qǐng)求能力,并下降到你需要的uid.
?
group <groupname> [ <groupname> ]*
???? 在執(zhí)行服務(wù)前改變組。在第一個(gè)組后的組將設(shè)為進(jìn)程附加組( 通過(guò)setgroups()). 當(dāng)前默認(rèn)為root.
?
oneshot
???? 在服務(wù)退出后不重啟。
?
class <name>
???? 為service 指定一個(gè)類別名。同樣類名的所有的服務(wù)可以一起啟動(dòng)或停止。如果沒(méi)有指定類別的服務(wù)默認(rèn)為"default" 類。
?
onrestart
?????? 當(dāng)服務(wù)重啟時(shí)執(zhí)行一個(gè)命令。
?
Triggers
--------
???? Triggers( 觸發(fā)器) 是一個(gè)字符串,可以用來(lái)匹配某種類型的事件并執(zhí)行一個(gè)action 。
?
boot
???? 這是當(dāng)init 開(kāi)始后執(zhí)行的第一個(gè)觸發(fā)器( 當(dāng)/init.conf 被加載)
?
<name>=<value>
???? 當(dāng)property <name> 被設(shè)為指定的值<value> 時(shí)觸發(fā)。
?
device-added-<path>
device-removed-<path>
???? 當(dāng)設(shè)備節(jié)點(diǎn)被添加或移除時(shí)觸發(fā)。
?
service-exited-<name>
???? 當(dāng)指定的服務(wù)存在時(shí)觸發(fā)
?
?
Commands
--------
?
exec <path> [ <argument> ]*
???? Fork 并執(zhí)行一個(gè)程序(<path>). 這將被block 直到程序執(zhí)行完畢。最好避免執(zhí)行例如內(nèi)建命令以外的程序,它可能會(huì)導(dǎo)致init 被阻塞不動(dòng)。
?
export <name> <value>
???? 設(shè)定全局環(huán)境變量<name> 的值<value> ,當(dāng)這個(gè)命令執(zhí)行后所有的進(jìn)程都可以取得。
?
ifup <interface>
???? 使網(wǎng)絡(luò)接口<interface> 聯(lián)機(jī)。
?
import <filename>
???? 解析一個(gè)init 配置文件,擴(kuò)展當(dāng)前配置文件。
?
hostname <name>
???? 設(shè)置主機(jī)名
?
chmod <octal-mode> <path>
???? 改變文件訪問(wèn)權(quán)限
?
chown <owner> <group> <path>
???? 改變文件所屬和組
?
class_start <serviceclass>
???? 當(dāng)指定類別的服務(wù)沒(méi)有運(yùn)行,啟動(dòng)該類別所有的服務(wù)。
?
class_stop <serviceclass>
???? 當(dāng)指定類別的服務(wù)正在運(yùn)行,停止該類別所有的服務(wù)。
?
domainname <name>
???? 設(shè)置域名。
?
insmod <path>
???? 加載該路徑<path> 的模塊
?
mkdir <path> [mode] [owner] [group]
???? 在<path> 創(chuàng)建一個(gè)目錄, 可選選項(xiàng):mod,owner,group. 如果沒(méi)有指定,目錄以755 權(quán)限,owner 為root,group 為root 創(chuàng)建.
?
mount <type> <device> <dir> [ <mountoption> ]*
???? 嘗試mount <device> 到目錄<dir>. <device> 可以用mtd@name 格式以命名指定一個(gè)mtd 塊設(shè)備。<mountoption> 包含"ro","rw","remount","noatime".
?
setkey
???? 暫時(shí)沒(méi)有
?
setprop <name> <value>
???? 設(shè)置系統(tǒng)property <name> 的值<value>.
?
setrlimit <resource> <cur> <max>
???? 設(shè)置resource 的rlimit.
?
start <service>
???? 啟動(dòng)一個(gè)沒(méi)有運(yùn)行的服務(wù)。
?
stop <service>
???? 停止一個(gè)正在運(yùn)行的服務(wù)。
?
symlink <target> <path>
???? 創(chuàng)建一個(gè)<path> 的符號(hào)鏈接到<target>
?
sysclktz <mins_west_of_gmt>
???? 設(shè)置系統(tǒng)時(shí)區(qū)(GMT 為0)
?
trigger <event>
???? 觸發(fā)一個(gè)事件。用于調(diào)用其它action 。
?
write <path> <string> [ <string> ]*
???? 打開(kāi)<path> 的文件并寫(xiě)入一個(gè)或多個(gè)字符串。
?
?
Properties
----------
Init 會(huì)更新一些系統(tǒng)property 以提供查看它正在干嘛。
init.action
???? 當(dāng)前正在執(zhí)行的action, 如果沒(méi)有則為""
?
init.command
???? 被執(zhí)行的命令,如果沒(méi)有則為""
?
init.svc.<name>
???? 命名為<name> 的服務(wù)的狀態(tài)("stopped", "running", "restarting")
?
?
init.rc 示例 :
-----------------
?
# 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 ?/system
?? mount yaffs2?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í)行的程序輸出的信息和錯(cuò)誤到/dev/null. 為了debug ,你可以通過(guò)Android 程序logwrapper 執(zhí)行你的程序。這將復(fù)位向輸出/ 錯(cuò)誤輸出到Android logging 系統(tǒng)( 通過(guò)logcat 訪問(wèn)) 。
例如
service akmd /system/bin/logwrapper /sbin/akmd
總結(jié)
以上是生活随笔為你收集整理的android init.rc语法标准 .的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: wifi无线网卡移植到andorid
- 下一篇: Android中对Log日志文件的分析