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