日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

android init.rc语法标准 .

發布時間:2025/4/5 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android init.rc语法标准 . 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android 初始化語言由四大類聲明組成: 行為類(Actions), 命令類(Commands) ,服務類(Services), 選項類(Options).

? * 初始化語言以行為單位,由以空格間隔的語言符號組成。C 風格的反斜杠轉義符可以用來插入空白到語言符號。雙引號也可以用來防止文本被空格分成多個語言符號。當反斜杠在行末時,作為折行符。

? * # 開始( 前面允許有空格) 的行為注釋行。

? * ActionsServices 隱含聲明一個新的段落。所有該段落下CommandsOptions 的聲明屬于該段落。第一段落前的CommandsOptions 被忽略。

? * ActionsServices 擁有獨一無二的命名。在它們之后聲明相同命名的類將被當作錯誤并忽略。

Actions

-------

Actions 是一系列命令的命名。Actions 擁有一個觸發器(trigger) 用來決定action 何時執行。當一個action 在符合觸發條件被執行時,如果它還沒被加入到待執行隊列中的話,則加入到隊列最后。

隊列中的action 依次執行,action 中的命令也依次執行。Init 在執行命令的中間處理其它活動( 設備創建/ 銷毀,property 設置,進程重啟)

Actions 表現形式為:

on <trigger>

?? <command>

?? <command>

?? <command>

?

Services

--------

Services 是由init 啟動,在它們退出時重啟( 可選)Service 表現形式為:

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

?? <option>

?? <option>

?? ...

??

Options

-------

OptionsServices 的修飾,它們影響init 何時、如何運行service.

?

critical

???? 這是一個設備關鍵服務(device-critical service) . 如果它在4 分鐘內退出超過4 次,設備將重啟并進入恢復模式。

?

disabled

???? 這個服務的級別將不會自動啟動,它必須被依照服務名指定啟動才可以啟動。

?

setenv <name> <value>

???? 設置已啟動的進程的環境變量<name> 的值<value>

?

socket <name> <type> <perm> [ <user> [ <group> ] ]

???? 創建一個名為/dev/socket/<name>unix domin socket ,并傳送它的fd 到已啟動的進程。<type> 必須為"dgram""stream". 用戶和組默認為0.

?

user <username>

???? 在執行服務前改變用戶名。當前默認為root. 如果你的進程需要linux 能力,你不能使用這個命令。你必須在還是root 時請求能力,并下降到你需要的uid.

?

group <groupname> [ <groupname> ]*

???? 在執行服務前改變組。在第一個組后的組將設為進程附加組( 通過setgroups()). 當前默認為root.

?

oneshot

???? 在服務退出后不重啟。

?

class <name>

???? service 指定一個類別名。同樣類名的所有的服務可以一起啟動或停止。如果沒有指定類別的服務默認為"default" 類。

?

onrestart

?????? 當服務重啟時執行一個命令。

?

Triggers

--------

???? Triggers( 觸發器) 是一個字符串,可以用來匹配某種類型的事件并執行一個action

?

boot

???? 這是當init 開始后執行的第一個觸發器(/init.conf 被加載)

?

<name>=<value>

???? property <name> 被設為指定的值<value> 時觸發。

?

device-added-<path>

device-removed-<path>

???? 當設備節點被添加或移除時觸發。

?

service-exited-<name>

???? 當指定的服務存在時觸發

?

?

Commands

--------

?

exec <path> [ <argument> ]*

???? Fork 并執行一個程序(<path>). 這將被block 直到程序執行完畢。最好避免執行例如內建命令以外的程序,它可能會導致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> 創建一個目錄, 可選選項:mod,owner,group. 如果沒有指定,目錄以755 權限,ownerroot,grouproot 創建.

?

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

???? 嘗試mount <device> 到目錄<dir>. <device> 可以用mtd@name 格式以命名指定一個mtd 塊設備。<mountoption> 包含"ro","rw","remount","noatime".

?

setkey

???? 暫時沒有

?

setprop <name> <value>

???? 設置系統property <name> 的值<value>.

?

setrlimit <resource> <cur> <max>

???? 設置resourcerlimit.

?

start <service>

???? 啟動一個沒有運行的服務。

?

stop <service>

???? 停止一個正在運行的服務。

?

symlink <target> <path>

???? 創建一個<path> 的符號鏈接到<target>

?

sysclktz <mins_west_of_gmt>

???? 設置系統時區(GMT0)

?

trigger <event>

???? 觸發一個事件。用于調用其它action

?

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

???? 打開<path> 的文件并寫入一個或多個字符串。

?

?

Properties

----------

Init 會更新一些系統property 以提供查看它正在干嘛。

init.action

???? 當前正在執行的action, 如果沒有則為""

?

init.command

???? 被執行的命令,如果沒有則為""

?

init.svc.<name>

???? 命名為<name> 的服務的狀態("stopped", "running", "restarting")

?

?

init.rc 示例 :

-----------------

?

# 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. 為了debug ,你可以通過Android 程序logwrapper 執行你的程序。這將復位向輸出/ 錯誤輸出到Android logging 系統( 通過logcat 訪問)

例如

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

總結

以上是生活随笔為你收集整理的android init.rc语法标准 .的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。