亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android init.rc文件淺析

發布時間:2020-08-05 10:03:04 來源:網絡 閱讀:541 作者:yangxiaoming123 欄目:移動開發

本文主要來自$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指定一個相同的類屬,方便操作同時啟動或停止.

3 語句解析

3.1 動作(Action)

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

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

[plain] view plaincopy

  1. on <trigger>  

  2.    <command>  

  3.    <command>  

  4.    <command>  


3.2 服務(services)

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

它的語法結構如下所示:

[plain] view plaincopy

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

  2.    <option>  

  3.    <option>  

  4.    ...  


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)

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


觸發器描述
bootinit程序執行,并載入/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指令
setkeyTBD(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"


4 一個 init.conf例子

[plain] view plaincopy

  1. # not complete -- just providing some examples of usage  

  2. #  

  3. on boot  

  4.    export PATH /sbin:/system/sbin:/system/bin  

  5.    export LD_LIBRARY_PATH /system/lib  

  6.   

  7.    mkdir /dev  

  8.    mkdir /proc  

  9.    mkdir /sys  

  10.   

  11.    mount tmpfs tmpfs /dev  

  12.    mkdir /dev/pts  

  13.    mkdir /dev/socket  

  14.    mount devpts devpts /dev/pts  

  15.    mount proc proc /proc  

  16.    mount sysfs sysfs /sys  

  17.   

  18.    write /proc/cpu/alignment 4  

  19.   

  20.    ifup lo  

  21.   

  22.    hostname localhost  

  23.    domainname localhost  

  24.   

  25.    mount yaffs2 mtd@system /system  

  26.    mount yaffs2 mtd@userdata /data  

  27.   

  28.    import /system/etc/init.conf  

  29.   

  30.    class_start default  

  31.   

  32. service adbd /sbin/adbd  

  33.    user adb  

  34.    group adb  

  35.   

  36. service usbd /system/bin/usbd -r  

  37.    user usbd  

  38.    group usbd  

  39.    socket usbd 666  

  40.   

  41. service zygote /system/bin/app_process -Xzygote /system/bin --zygote  

  42.    socket zygote 666  

  43.   

  44. service runtime /system/bin/runtime  

  45.    user system  

  46.    group system  

  47.   

  48. on device-added-/dev/compass  

  49.    start akmd  

  50.   

  51. on device-removed-/dev/compass  

  52.    stop akmd  

  53.   

  54. service akmd /sbin/akmd  

  55.    disabled  

  56.    user akmd  

  57.    group akmd  

  58.    


5 調試注意事項

在默認情況下,通過init程序啟動的程序的標準輸出stdout和標準錯誤輸出stderr會重定向到/dev/null.如:

[plain] view plaincopy

  1. service akmd /system/bin/logwrapper /sbin/akmd  

為了更方便調試你的程序,你可以使用Android的log系統,標準輸出和標準錯誤輸出會重定義到Android的log系統中來.


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岫岩| 水富县| 张家口市| 宁强县| 佳木斯市| 洪泽县| 苍山县| 绵竹市| 灌阳县| 遂宁市| 太仓市| 武安市| 台南市| 遂川县| 长沙县| 揭西县| 高青县| 汾西县| 栖霞市| 怀化市| 长沙县| 个旧市| 通化市| 昌吉市| 西华县| 剑河县| 噶尔县| 军事| 集安市| 奉贤区| 福清市| 双流县| 长武县| 宁乡县| 大洼县| 夏邑县| 寿光市| 菏泽市| 嵊泗县| 北川| 祥云县|