Android init.rc解析【轉】

來源:互聯網
上載者:User

標籤:

轉自:http://www.linuxidc.com/Linux/2014-10/108438.htm

 

本文主要來自$Android_SOURCE/system/init/readme.txt的翻譯.

1 簡述

Android init.rc檔案由系統第一個啟動的init程式解析,此檔案由語句組成,主要包含了四種類型的語句:Action,Commands,Services,Options.在init.rc檔案中一條語句通常是佔據一行.單詞之間是通過空格符來相隔的.如果需要在單詞內使用空格,那麼得使用逸出字元"\",如果在一行的末尾有一個反斜線,那麼是換行摺疊符號,應該和下一行合并成一起來處理,這樣做主要是為了避免一行的字元太長,與C語言中的含義是一致的。注釋是以#號開頭。 Action和services顯式聲明了一個語句塊,而commands和options屬於最近聲明的語句塊。在第一個語句塊之前 的commands和options會被忽略.

在具體講解這之前,有些關鍵詞得先瞭解.

2 關鍵字

token:  電腦語言中的一個單詞,就跟英文中的單詞差不多一人概念.

Section: 語句塊,相當於C語言中大括弧內的一個塊。一個Section以Service或On開頭的語句塊.以Service開頭的Section叫做服務,而以On開頭的叫做動作(Action).

services: 服務.

Action: 動作

commands:命令.

options:選項.

trigger:觸發器,或者叫做觸發條件.

class: 類屬,即可以為多個service指定一個相同的類屬,方便操作同時啟動或停止.

如何將ramdisk.img 編譯進核心和修改init.rc  http://www.linuxidc.com/Linux/2013-07/87026.htm

Android init 進程 init.rc init.*.rc  http://www.linuxidc.com/Linux/2013-01/77884.htm

Android: 啟動init.rc 中service的許可權問題 http://www.linuxidc.com/Linux/2011-04/35014.htm

Android分析之init.rc http://www.linuxidc.com/Linux/2011-02/32762.htm

Android啟動指令碼init.rc http://www.linuxidc.com/Linux/2010-09/28637.htm

3 語句解析
3.1 動作(Action)
動作表示了一組命令(commands)組成.動作包含一個觸發器,決定了何時執行這個動作。當觸發器的條件滿足時,這個動作會被加入到已被執行的隊列尾。如果此動作在隊列中已經存在,那麼它將不會執行.

 一個動作所包含的命令將被依次執行。動作的文法如下所示:

on <trigger>  
  <command>  
  <command>  
  <command> 

3.2 服務(services)
服務是指那些需要在系統初始化時就啟動或退出時自動重啟的程式.

它的文法結構如下所示:

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

3.3 選項(options)
選項是用來修改服務的。它們影響如何及何時運行這個服務.

選項 描述
critical 據裝置相關的關鍵服務,如果在4分鐘內,此服務重複啟動了4次,那麼裝置將會重啟進入還原模式。
disabled 服務不會自動運行,必須顯式地通過伺服器來啟動。
setenv <name> <value> 設定環境變數
socket <name> <type> <perm> [ <user> [ <group> ] ] 在/dev/socket/下建立一個unix domain的socket,並傳遞建立的檔案描述符fd給服務進程.其中type必須為dgram或stream,seqpacket.使用者名稱和組名預設為0
user <username> 在執行此服務之前先切換使用者名。當前預設為root.
group <groupname> [ <groupname> ]* 類似於user,切換組名
oneshot 當此服務退出時不會自動重啟.
class <name> 給服務指定一個類屬,這樣方便操作多個服務同時啟動或停止.預設情況下為default.
onrestart 當服務重啟時執行一條指令,

3.4 觸發器(trigger)
觸發器用來描述一個觸發條件,當這個觸發條件滿足時可以執行動作. 

觸發器 描述
boot 當init程式執行,並載入/init.conf檔案時觸發.
<name>=<value> 當屬性名稱對應的值設定為指定值時觸發.
device-added-<path> 當添加裝置時觸發.
device-removed-<path> 當裝置移除時觸發.
service-exited-<name> 當指定的服務退出時觸發.

3.5 命令(commands)

命令 描述
exec <path> [ <argument> ]* 執行指定路徑下的程式,並傳遞參數.
export <name> <value> 設定全域環境參數,此參數被設定後對所有進程都有效.
ifup <interface> 使指定的網路介面"上線",相當啟用指定的網路介面
import <filename> 匯入一個額外的init設定檔.
hostname <name> 設定主機名稱
chdir <directory> 改變工作目錄.
chmod <octal-mode> <path> 改變指定檔案的讀取許可權.
chown <owner> <group> <path> 改變指定檔案的擁有都和組名的屬性.
chroot <directory> 改變進行的根目錄.
class_start <serviceclass> 啟動指定類屬的所有服務,如果服務已經啟動,則不再重複啟動.
class_stop <serviceclass> 停止指定類屬的所胡服務.
domainname <name> 設定網域名稱
insmod <path> 安裝模組到指定路徑.
mkdir <path> [mode] [owner] [group] 用指定參數建立一個目錄,在預設情況下,建立的目錄讀取許可權為755.使用者名稱為root,組名為root.
mount <type> <device> <dir> [ <mountoption> ]* 類似於linux的mount指令
setkey TBD(To Be Determined),待定.
setprop <name> <value> 設定屬性及對應的值.
setrlimit <resource> <cur> <max> 設定資源的rlimit(資源限制),不懂就百度一下rlimit
start <service> 如果指定的服務未啟動,則啟動它.
stop <service> 如果指定的服務當前正在運行,則停止它.
symlink <target> <path> 建立一個符號連結.
sysclktz <mins_west_of_gmt> 設定系統基準時間.
trigger <event> Trigger an event.  Used to queue an action from another action.這名話沒有理解,望高手指點.
write <path> <string> [ <string> ]* 往指定的檔案寫字串.

3.6 屬性(Properties)
init程式在運行時會更新屬性系統的一些屬性,提供者內部正在執行的資訊.

屬性名稱 描述
init.action 當前正在執行的動作,如果沒有則為空白字串""
init.command 當前正在執行的命令.沒有則為空白字串.
init.svc.<name> 當前某個服務的狀態,可為"stopped", "running", "restarting"

Android init.rc解析【轉】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.