Android 初始化語言(Android init Language翻譯)

來源:互聯網
上載者:User

在分析Android系統的init程式源碼時看到了這份Doc,覺得對系統的分析挺有用的,所以翻譯了出來!

 

Android初始化語言(init.*.rc、init.conf檔案格式)

    Android初始化語言套件含了四種類型的聲明:Actions(行動)、Commands(命令)、Services(服務)和Options(選項)。

    所有這些都是以行為單位的,各種記號由空格來隔開。C語言風格的反斜線號可用於在記號間插入空格。雙引號也可用於防止字串被空格分割成多個記號。行末的反斜線用於折行。
    注釋行以井號(#)開頭(允許以空格開頭)。
    Actions和Services聲明一個新的分組。所有的命令或選項都屬於最近申明的分組。位於第一個分組之前的命令或選項將會被忽略。
    Actions和Services有唯一的名字。如果有重名的情況,第二個申明的將會被作為錯誤忽略。(???我們是否應該以覆蓋來代替忽略)

Actions(行動)
----------
    Actions其實就是一序列的Commands(命令)。Actions都有一個trigger(觸發器),它被用於決定action的執行時間。當一個符合action觸發條件的事件發生時,action會被加入到執行隊列的末尾,除非它已經在隊列裡了。
    隊列中的每一個action都被依次提取出,而這個action中的每個command(命令)都將被依次執行。Init在這些命令的執行期間還控制著其他的活動(裝置節點的建立和登出、屬性的設定、進程的重啟)。

Actions的形式如下:

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

Services(服務)
----------
    Services(服務)是一個程式,他在初始化時啟動,並在退出時重啟(可選)。Services(服務)的形式如下:

 

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

 

Options(選項)
----------
    Options(選項)是一個Services(服務)的修正者。他們影響Services(服務)在何時,並以何種方式運行。

        critical(關鍵)
            說明這是一個對於裝置關鍵的服務。如果他四分鐘內退出大於四次,系統將會重啟並進入recovery(恢複)模式。

        disabled(失效)
            說明這個服務不會同與他同trigger(觸發器)下的服務自動啟動。他必須被明確的按名啟動。

        setenv <name> <value> (設定環境變數)
            在進程啟動時將環境變數<name>設定為<value>。

        socket <name> <type> <perm> [ <user> [ <group> ] ]
            建立一個Uinx域的名為/dev/socket/<name> 的通訊端,並傳遞它的檔案描述符給已啟動的進程。<type> 必須是 "dgram"或"stream"。User 和 group預設為0。

        user <username>
            在啟動這個服務前改變該服務的使用者名稱。此時預設為root。(???有可能的話應該預設為nobody)。當前,如果你的進程要求Linux capabilities(能力),你無法使用這個命令。即使你是root,你也必須在程式中請求capabilities(能力)。然後降到你想要的uid。

        group <groupname> [ <groupname> ]*
            在啟動這個服務前改變該服務的組名。除了(必需的)第一個組名,附加的組名通常被用於設定進程的補充組(通過setgroups())。此時預設為root。(???有可能的話應該預設為nobody)。
    
        oneshot
            服務退出時不重啟。

        class <name>
            指定一個服務類。所有同一類的服務可以同時啟動和停止。如果不通過class選項指定一個類,則預設為"default"類服務。

        onrestart
            當服務重啟,執行一個命令(下詳)。

Triggers(觸發器)
----------
    Triggers(觸發器)是一個用於匹配特定事件類型的字串,用於使Actions(行動)發生。
    
        boot
            這是init執行後的第一個被觸發的Triggers(觸發器)。(在 /init.conf (啟動設定檔)被裝載之後)

        <name>=<value>
            這種形式的Triggers(觸發器)會在屬性<name>被設定為指定的<value>時被觸發。

        device-added-<path>
        device-removed-<path>
            這種形式的Triggers(觸發器)會在一個裝置節點檔案被增刪時觸發。

        service-exited-<name>
            這種形式的Triggers(觸發器)會在一個特定的服務退出時觸發。

Commands(命令)
----------    
    exec <path> [ <argument> ]*
         建立和執行一個程式(<path>)。在程式完全執行前,init將會阻塞。由於它不是內建命令,應盡量避免使用exec,它可能會引起init卡死。(??? 是否需要一個逾時設定?)

    export <name> <value>
        在全域環境變數中設在環境變數 <name>為<value>。(這將會被所有在這命令之後啟動並執行進程所繼承)
       
    ifup <interface>
        啟動網路介面<interface>

    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>,可以選擇性地指定mode、owner以及group。如果沒有指定,預設的許可權為755,並屬於root使用者和root組。

    mount <type> <device> <dir> [ <mountoption> ]*
        試圖在目錄<dir>掛載指定的裝置。<device> 可以是以 mtd@name 的形式指定一個mtd塊裝置。<mountoption>包括 "ro"、"rw"、"remount"、"noatime"、 ...

    setkey
           待完成......(暫時不可用)

    setprop <name> <value>
           設定系統屬性 <name> 為 <value>值.

    setrlimit <resource> <cur> <max>
        設定<resource>的rlimit(資源限制)。

    start <service>
        啟動指定服務(如果此服務還未運行)。

    stop <service>
        停止指定服務(如果此服務在運行中)。

    symlink <target> <path>
        建立一個指向<path>的軟串連<target>。

    sysclktz <mins_west_of_gmt>
        設定系統時鐘基準(0代表時鐘滴答以格林威治平均時(GMT)為準)

    trigger <event>
           觸發一個事件。用於將一個action與另一個 action排列。(?????)

    write <path> <string> [ <string> ]*
           開啟路徑為<path>的一個檔案,並寫入一個或多個字串。

Properties(屬性)
----------
    Init更新一些系統屬性以提供對正在發生的事件的監控能力:

        init.action
               此屬性值為正在被執行的action的名字,如果沒有則為""。

        init.command
               此屬性值為正在被執行的command的名字,如果沒有則為""。

        init.svc.<name>
               名為<name>的service的狀態("stopped"(停止), "running"(運行), "restarting"(重啟))                

init.conf執行個體
-----------------

 

# 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執行時會將標準輸出和標準錯誤都重新導向到/dev/null(丟棄)。若你想要獲得調試資訊,你可以通過Andoird系統中的logwrapper程式執行你的程式。它會將標準輸出/標準錯誤都重新導向到Android日誌系統(通過logcat訪問)。

例如:

service akmd /system/bin/logwrapper /sbin/akmd

 

PDF下載

相關文章

聯繫我們

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