Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android的init過程(二)初始化語言(init.rc)解析

Android的init過程(二)初始化語言(init.rc)解析

編輯:Android開發教程

本文使用的軟件版本

Android:4.2.2

Linux內核:3.1.10

在上一篇文章中介紹了init的初始化第一階段,也就是處理各種屬性。在本文將會詳細分析init最重要的一環:解析init.rc文件。

init.rc文件並不是普通的配置文件,而是由一種被稱為“Android初始化語言”(Android Init Language,這裡簡稱為AIL)的腳本寫成的文件。在了解init如何解析init.rc文件之前,先了解AIL非常必要,否則機械地分析init.c及其相關文件的源代碼毫無意義。

為了學習AIL,讀者可以到自己Android手機的根目錄尋找init.rc文件,最好下載到本地以便查看,如果有編譯好的Android源代碼,在<Android源代碼根目錄>out/target/product/generic/root目錄也可找到init.rc文件。

AIL由如下4部分組成。

1. 動作(Actions)

2. 命令(Commands)

3. 服務(Services)

4. 選項(Options)

這4部分都是面向行的代碼,也就是說用回車換行符作為每一條語句的分隔符。而每一行的代碼由多個符號(Tokens)表示。可以使用反斜槓轉義符在Token中插入空格。雙引號可以將多個由空格分隔的Tokens合成一個Tokens。如果一行寫不下,可以在行尾加上反斜槓,來連接下一行。也就是說,可以用反斜槓將多行代碼連接成一行代碼。

AIL的注釋與很多Shell腳本一行,以#開頭。

AIL在編寫時需要分成多個部分(Section),而每一部分的開頭需要指定Actions或Services。也就是說,每一個Actions或Services確定一個Section。而所有的Commands和Options只能屬於最近定義的Section。如果Commands和Options在第一個Section之前被定義,它們將被忽略。

Actions和Services的名稱必須唯一。如果有兩個或多個Action或Service擁有同樣的名稱,那麼init在執行它們時將拋出錯誤,並忽略這些Action和Service。

下面來看看Actions、Services、Commands和Options分別應如何設置。

Actions的語法格式如下:

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

也就是說Actions是以關鍵字on開頭的,然後跟一個觸發器,接下來是若干命令。例如,下面就是一個標准的Action。

on boot
    ifup lo
    hostname localhost
    domainname localdomain

其中boot是觸發器,下面三行是command

那麼init.rc到底支持哪些觸發器呢?目前init.rc支持如下5類觸發器。

1. boot

這是init執行後第一個被觸發Trigger,也就是在 /init.rc被裝載之後執行該Trigger

2. <name>=<value>

當屬性<name>被設置成<value>時被觸發。例如,

on property:vold.decrypt=trigger_reset_main

class_reset main

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved