Android 的 init.rc 檔案簡介

來源:互聯網
上載者:User

init.rc由許多的Action和Service組成。每一個語句佔據一行,並且各個關鍵字被空格分開.

由 # (前面允許有空格)開始的行都是注釋行(comment)

一個actions 或 services 的開始隱含聲明了一個新的段,所有commands 或 options 屬於最近的聲明。在第一個段之前的 commands 或 options 都會被忽略

每一個actions 和 services 都有不同的名字。後面與前面發生重名的,那麼這個後面重名的將被忽略或被認為是一個錯誤。

actions其實就是一組被命名的命令序列。actions 都有一個觸發條件,觸發條件決定了action何時執行。當一個事件發生如果匹配action的觸發條件,那麼這個action將會被添加到預備執行隊列的尾部(除非它已經在隊列當中)

每一個action中的命令將被順序執行。init進程負責在其它activities(如:裝置建立/銷毀,屬性設定,進程重啟)之間執行這些命令序列。

每一個action格式如下:

on <trigger>

<command>

<command>

  ...

trigger是一個action觸發的條件,一共有如下幾種:

1、boot

發生在init啟動時,/init.conf被載入以後。

2、<name>=<value>

發生在名字為<name>的屬性的值被設定為<value>時。

3、device-added-<path>/device-removed-<path>

當一個device node被添加/刪除時。

4、service-exited-<name>當某個服務退出時。

command一共有如下幾種:

1、exec <path> [<argument>]*

fork並execute一個路徑<path>下面的程式,直到程式執行完畢後,init才會繼續前進。盡量避免使用這個command,它有可能導致init阻塞。其它command不存在這個問題。

2、export <name> <value>

把全域環境變數<name>的值設定為<value>。這個命令執行完畢以後啟動的所有進程都會繼承這個全域變數。

3、ifup <interface>

Bring the network interface <interface> online.(開啟某個網卡)

4、import <filename>

Parse an init config file, extending the current configuration.

5、hostname <name>

Set the host name.

6、class_start <serviceclass>

如果某一類service沒有運行,啟動它們。

7、class_stop <serviceclass>

如果某一類service正在運行,停止它們。

8、domainname <name>

Set the domain name.

9、insmod <path>

安裝路徑<path>指定的模組。

10、mkdir <path>

建立<path>代表的檔案夾,只能一層層地建立。

11、mount <type> <device> <dir> [ <mountoption> ]*

把<device>掛載到系統類別型為<type>的檔案系統的<dir>目錄下。<device>可能有mtd@name的形式,代表名字為name的mtd塊裝置。

12、setkey

未定義

13、setprop <name> <value>

設定系統屬性。

14、setrlimit <resource> <cur> <max>

Set the rlimit for a resource.

15、start <service>

如果服務沒有運行,啟動它。

16、stop <service>

如果服務正在運行,停止它。

17、symlink <target> <path>

把<target>連結到目錄<path>下。

18、write <path> <string> [ <string> ]*

開啟<path>所指的檔案,並把<string>寫入。

關於3、5、8,參見init.rc裡面的

on boot

# basic network init

    ifup lo

    hostname localhost

    domainname localdomain

關於14,參見init.rc裡面的

# set RLIMIT_NICE to allow priorities from 19 to -20

    setrlimit 13 40 40

說完了action下來我們來說說service

services 是一些由init 啟動 和 重新(如果有需要)啟動的程式,當然這些程式如果是存在的。

每一個service格式如下:

service <name> <pathname> [ <argument> ]*

<option>

<option>

  ...

例如:

1

service ppp /system/bin/pppd call gprs
     user root
     group system radio
     disabled
     oneshot

2

service mtpd /system/bin/mtpd
    socket mtpd stream 600 system system
    user vpn
    group vpn net_admin net_raw
    disabled
    oneshot

options 是service的修飾符,用來告訴init 怎樣及何時啟動service。一共有如下幾種:

1、disableds

這個服務不能通過啟動一類服務來啟動,只能單獨以名字來啟動。

2、socket <type> <name> <perm>  <user> <group>

建立一個名字為/dev/socket/<name>的unix domain socket,並把它的fd傳遞給 載入的進程。<type>的值是dgram或stream.

注意:在init.rc中使用socket時,<type>是放在<name>之後的。

init程式在運行過程中可能會設定幾個特殊屬性的值,來告訴其它程式它正在做什麼。這些屬性是:

(1)、init.action

當前正在執行的action的名字,如果沒有,就是“”。

(2)、init.command

當前正在執行的command的名字,如果沒有,就是“”。

(3)、init.svc.<name>

一個服務的狀態。可能的值有:“stopped”,"running","restarting"

3、user <username>

在啟動服務之前,把使用者名稱切換到<username>。預設是root

4、group <groupname> [ <groupname> ]*

在啟動服務之前,把組名切換到<groupname>。一個服務可能屬於多個組。

5、capability [ <capability> ]+

Set linux capability before exec'ing this service

6、oneshot

服務之運行一次,退出後不再重啟。

7、class <name>

為服務設定一個類別,一個類別是中的服務可以同時啟動或停止。如果沒有這個屬性,服務的預設類別是“default”

預設情況下,通過init啟動的程式都會把stdout和stderr定向到/dev/null。有時為了調試方便,可以通過Android的logwrapper程式啟動某個程式。這樣,被啟動程式stdout和stderr就被定向到了Android的LOG系統中,可以通過logcat來查看了。

例如:

service akmd /system/bin/logwraper /sbin/akmd

轉載:CSDN  網友

http://blog.csdn.net/a345017062/archive/2011/03/11/6239204.aspx,這篇部落格,自己進行了部分修改,對於Android的軟體研發人員,很有必要研究一下。

來源:http://blog.csdn.net/yimiyangguang1314/article/details/6268177

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.