本文主要來自$ANDROID_SOURCE/system/init/readme.txt的翻譯.
專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)福安免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
Android init.rc文件由系統(tǒng)第一個(gè)啟動(dòng)的init程序解析,此文件由語句組成,主要包含了四種類型的語 句:Action,Commands,Services,Options.在init.rc文件中一條語句通常是占據(jù)一行.單詞之間是通過空格符來相隔 的.如果需要在單詞內(nèi)使用空格,那么得使用轉(zhuǎn)義字符"\",如果在一行的末尾有一個(gè)反斜杠,那么是換行折疊符號(hào),應(yīng)該和下一行合并成一起來處理,這樣做主 要是為了避免一行的字符太長(zhǎng),與C語言中的含義是一致的。注釋是以#號(hào)開頭。 Action和services顯式聲明了一個(gè)語句塊,而commands和options屬于最近聲明的語句塊。在第一個(gè)語句塊之前 的commands和options會(huì)被忽略.
在具體講解這之前,有些關(guān)鍵詞得先了解.
token: 計(jì)算機(jī)語言中的一個(gè)單詞,就跟英文中的單詞差不多一人概念.
Section: 語句塊,相當(dāng)于C語言中大括號(hào)內(nèi)的一個(gè)塊。一個(gè)Section以Service或On開頭的語句塊.以Service開頭的Section叫做服務(wù),而以O(shè)n開頭的叫做動(dòng)作(Action).
services: 服務(wù).
Action: 動(dòng)作
commands:命令.
options:選項(xiàng).
trigger:觸發(fā)器,或者叫做觸發(fā)條件.
class: 類屬,即可以為多個(gè)service指定一個(gè)相同的類屬,方便操作同時(shí)啟動(dòng)或停止.
動(dòng)作表示了一組命令(commands)組成.動(dòng)作包含一個(gè)觸發(fā)器,決定了何時(shí)執(zhí)行這個(gè)動(dòng)作。當(dāng)觸發(fā)器的條件滿足時(shí),這個(gè)動(dòng)作會(huì)被加入到已被執(zhí)行的隊(duì)列尾。如果此動(dòng)作在隊(duì)列中已經(jīng)存在,那么它將不會(huì)執(zhí)行.
一個(gè)動(dòng)作所包含的命令將被依次執(zhí)行。動(dòng)作的語法如下所示:
[plain]view plaincopy
on <trigger>
<command>
<command>
<command>
服務(wù)是指那些需要在系統(tǒng)初始化時(shí)就啟動(dòng)或退出時(shí)自動(dòng)重啟的程序.
它的語法結(jié)構(gòu)如下所示:
[plain]view plaincopy
service <name> <pathname> [ <argument> ]*
<option>
<option>
...
選項(xiàng)是用來修改服務(wù)的。它們影響如何及何時(shí)運(yùn)行這個(gè)服務(wù).
選項(xiàng) | 描述 |
critical | 據(jù)設(shè)備相關(guān)的關(guān)鍵服務(wù),如果在4分鐘內(nèi),此服務(wù)重復(fù)啟動(dòng)了4次,那么設(shè)備將會(huì)重啟進(jìn)入還原模式。 |
disabled | 服務(wù)不會(huì)自動(dòng)運(yùn)行,必須顯式地通過服務(wù)器來啟動(dòng)。 |
setenv <name> <value> | 設(shè)置環(huán)境變量 |
socket <name> <type> <perm> [ <user> [ <group> ] ] | 在/dev/socket/下創(chuàng)建一個(gè)unix domain的socket,并傳遞創(chuàng)建的文件描述符fd給服務(wù)進(jìn)程.其中type必須為dgram或stream,seqpacket.用戶名和組名默認(rèn)為0 |
user <username> | 在執(zhí)行此服務(wù)之前先切換用戶名。當(dāng)前默認(rèn)為root. |
group <groupname> [ <groupname> ]* | 類似于user,切換組名 |
oneshot | 當(dāng)此服務(wù)退出時(shí)不會(huì)自動(dòng)重啟. |
class <name> | 給服務(wù)指定一個(gè)類屬,這樣方便操作多個(gè)服務(wù)同時(shí)啟動(dòng)或停止.默認(rèn)情況下為default. |
onrestart | 當(dāng)服務(wù)重啟時(shí)執(zhí)行一條指令, |
觸發(fā)器用來描述一個(gè)觸發(fā)條件,當(dāng)這個(gè)觸發(fā)條件滿足時(shí)可以執(zhí)行動(dòng)作.
觸發(fā)器 | 描述 |
boot | 當(dāng)init程序執(zhí)行,并載入/init.conf文件時(shí)觸發(fā). |
<name>=<value> | 當(dāng)屬性名對(duì)應(yīng)的值設(shè)置為指定值時(shí)觸發(fā). |
device-added-<path> | 當(dāng)添加設(shè)備時(shí)觸發(fā). |
device-removed-<path> | 當(dāng)設(shè)備移除時(shí)觸發(fā). |
service-exited-<name> | 當(dāng)指定的服務(wù)退出時(shí)觸發(fā). |
命令 | 描述 |
exec <path> [ <argument> ]* | 執(zhí)行指定路徑下的程序,并傳遞參數(shù). |
export <name> <value> | 設(shè)置全局環(huán)境參數(shù),此參數(shù)被設(shè)置后對(duì)所有進(jìn)程都有效. |
ifup <interface> | 使指定的網(wǎng)絡(luò)接口"上線",相當(dāng)激活指定的網(wǎng)絡(luò)接口 |
import <filename> | 導(dǎo)入一個(gè)額外的init配置文件. |
hostname <name> | 設(shè)置主機(jī)名 |
chdir <directory> | 改變工作目錄. |
chmod <octal-mode> <path> | 改變指定文件的讀取權(quán)限. |
chown <owner> <group> <path> | 改變指定文件的擁有都和組名的屬性. |
chroot <directory> | 改變進(jìn)行的根目錄. |
class_start <serviceclass> | 啟動(dòng)指定類屬的所有服務(wù),如果服務(wù)已經(jīng)啟動(dòng),則不再重復(fù)啟動(dòng). |
class_stop <serviceclass> | 停止指定類屬的所胡服務(wù). |
domainname <name> | 設(shè)置域名 |
insmod <path> | 安裝模塊到指定路徑. |
mkdir <path> [mode] [owner] [group] | 用指定參數(shù)創(chuàng)建一個(gè)目錄,在默認(rèn)情況下,創(chuàng)建的目錄讀取權(quán)限為755.用戶名為root,組名為root. |
mount <type> <device> <dir> [ <mountoption> ]* | 類似于linux的mount指令 |
setkey | TBD(To Be Determined),待定. |
setprop <name> <value> | 設(shè)置屬性及對(duì)應(yīng)的值. |
setrlimit <resource> <cur> <max> | 設(shè)置資源的rlimit(資源限制),不懂就百度一下rlimit |
start <service> | 如果指定的服務(wù)未啟動(dòng),則啟動(dòng)它. |
stop <service> | 如果指定的服務(wù)當(dāng)前正在運(yùn)行,則停止它. |
symlink <target> <path> | 創(chuàng)建一個(gè)符號(hào)鏈接. |
sysclktz <mins_west_of_gmt> | 設(shè)置系統(tǒng)基準(zhǔn)時(shí)間. |
trigger <event> | Trigger an event. Used to queue an action from another action.這名話沒有理解,望高手指點(diǎn). |
write <path> <string> [ <string> ]* | 往指定的文件寫字符串. |
init程序在運(yùn)行時(shí)會(huì)更新屬性系統(tǒng)的一些屬性,提供程序內(nèi)部正在執(zhí)行的信息.
屬性名 | 描述 |
init.action | 當(dāng)前正在執(zhí)行的動(dòng)作,如果沒有則為空字符串"" |
init.command | 當(dāng)前正在執(zhí)行的命令.沒有則為空字符串. |
init.svc.<name> | 當(dāng)前某個(gè)服務(wù)的狀態(tài),可為"stopped", "running", "restarting" |
[plain]view plaincopy
# 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
在默認(rèn)情況下,通過init程序啟動(dòng)的程序的標(biāo)準(zhǔn)輸出stdout和標(biāo)準(zhǔn)錯(cuò)誤輸出stderr會(huì)重定向到/dev/null.如:
[plain]view plaincopy
service akmd /system/bin/logwrapper /sbin/akmd
為了更方便調(diào)試你的程序,你可以使用Android的log系統(tǒng),標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出會(huì)重定義到Android的log系統(tǒng)中來.
網(wǎng)頁標(biāo)題:Androidinit.rc文件淺析
鏈接分享:http://aaarwkj.com/article28/ihhhjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站收錄、微信公眾號(hào)、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站內(nèi)鏈、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)