欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 10 啟動(dòng)分析之init語(yǔ)法詳解

 更新時(shí)間:2022年10月10日 11:39:44   作者:格子里的夢(mèng)  
這篇文章主要為大家介紹了Android 10 啟動(dòng)分析之init語(yǔ)法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

init.rc腳本包含5種類(lèi)型,Action(動(dòng)作),Commands(命令), Services(服務(wù)),Options(選項(xiàng)), Imports(導(dǎo)入)。

以上這些都是基于“行”來(lái)解析的,并且用空格隔開(kāi)關(guān)鍵字。

如果關(guān)鍵字中有空格,處理方法類(lèi)似于C語(yǔ)言,使用/表示轉(zhuǎn)義,使用""防止關(guān)鍵字被斷開(kāi),另外需要注意/在末尾表示換行。

#開(kāi)頭表示注釋。

可以使用語(yǔ)法 ${propertiesty.name}展開(kāi)系統(tǒng)屬性。這也適用于需要連接的上下文,如import /init.Recovery.${ro.hardware}.rc

當(dāng)聲明一個(gè)service或者action的時(shí)候,它將隱式聲明一個(gè)section,它之后跟隨的command或者option都將屬于這個(gè)section。

Service的名稱(chēng)要保持唯一性。如果使用與現(xiàn)有Service相同的名稱(chēng)定義了第二個(gè)Service,則將忽略該Service并記錄錯(cuò)誤消息。

Actions

Action 指的是在某種條件下觸發(fā)一系列的命令,通常有一個(gè)Trigger,用于確定何時(shí)執(zhí)行操作。當(dāng)與Action的Trigger匹配的事件發(fā)生時(shí),該Action將被添加到待執(zhí)行隊(duì)列的尾部(除非它已經(jīng)在隊(duì)列上)。

Action的形式如下所示:

on <trigger> [&& <trigger>]*
   <command>
   <command>
   <command>

Services

Services在特定選項(xiàng)的約束下被init程序運(yùn)行或者重啟,Service的格式如下所示:

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

參數(shù)解釋?zhuān)?nbsp;

  • name 表示此service的名稱(chēng) 
  • pathname 此service所在路徑。 
  • argument 啟動(dòng)service所帶的參數(shù) 
  • option 對(duì)此service的約束選項(xiàng)。

Options

Options是Services的修飾符。它們影響init運(yùn)行Services的方式和時(shí)機(jī)。

class <name> [ <name>\* ]

為該服務(wù)指定一個(gè)class名,同一個(gè)class的所有服務(wù)必須同時(shí)自動(dòng)或者停止,默認(rèn)情況下服務(wù)的class名是"default" 。

console [<console>]

這個(gè)Service需要一個(gè)控制臺(tái)??蛇x的第二個(gè)參數(shù)選擇一個(gè)特定的控制臺(tái),而不是默認(rèn)的。可以通過(guò)設(shè)置androidboot.sole內(nèi)核參數(shù)來(lái)更改默認(rèn)的/dev/console。在所有情況下,都應(yīng)該省略前面的/dev/,因此/dev/tty0將被寫(xiě)作console tty0

critical

表明這個(gè)Service對(duì)設(shè)備至關(guān)重要,如果Service在四分鐘內(nèi)退出超過(guò)4次,則設(shè)備將重啟進(jìn)入恢復(fù)模式。

disabled

此Service不會(huì)自動(dòng)啟動(dòng),需要通過(guò)顯示調(diào)用Service名稱(chēng)來(lái)啟動(dòng)。

file <path> <type>

打開(kāi)文件路徑并將其FD傳遞給啟動(dòng)進(jìn)程。類(lèi)型必須是“r”、“w”或“RW”。

group <groupname> [ <groupname>\* ]

在啟動(dòng)服務(wù)將用戶(hù)組切換至<groupname>

keycodes <keycode> [ <keycode>\* ]

設(shè)置將觸發(fā)此服務(wù)的Keycodes。如果同時(shí)按下與傳遞的Keycodes對(duì)應(yīng)的所有鍵,則服務(wù)將啟動(dòng)。這通常用于啟動(dòng)bugreport服務(wù)。

oneshot

當(dāng)此Service退出時(shí),不要主動(dòng)去重啟它。

onrestart

在重啟時(shí)執(zhí)行一條命令。

oom_score_adjust <value>

將子程序的/proc/Self/oom_Score_adj設(shè)置為指定的值,該值必須在-1000到1000之間。

override

指示此Service用于覆蓋先前定義的具有相同名稱(chēng)的Service。

priority <priority>

Service進(jìn)程的調(diào)度優(yōu)先級(jí)。此值必須在-20到19之間。默認(rèn)優(yōu)先級(jí)為0。

restart_period <seconds>

如果一個(gè)non-oneshot Service退出,它將在其啟動(dòng)時(shí)間的基礎(chǔ)上加上這段時(shí)間后再重新啟動(dòng),默認(rèn)5s。對(duì)于打算定期運(yùn)行的服務(wù),可以增加此值。例如,它可以設(shè)置為3600表示服務(wù)應(yīng)該每小時(shí)運(yùn)行一次,或者86400表示服務(wù)應(yīng)該每天運(yùn)行。

setenv <name> <value>

設(shè)置啟動(dòng)環(huán)境變量。

shutdown <shutdown_behavior>

設(shè)置Service進(jìn)程的關(guān)閉行為。如果未指定此操作,則通過(guò)SIGTERM和SIGKILL關(guān)閉Service進(jìn)程。在關(guān)機(jī)期間,shutdown_behavior為“critical”的Service在shutdown超時(shí)之前不會(huì)被關(guān)閉。當(dāng)shutdown超時(shí)時(shí),即使標(biāo)記為“shutdown critical”的Service也將被關(guān)閉。當(dāng)執(zhí)行shut down操作時(shí),標(biāo)記為“shutdown critical”的服務(wù)如果沒(méi)有運(yùn)行,它將被啟動(dòng)。

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

創(chuàng)建一個(gè)名為/dev/Socket/name的Unix域套接字,并將其FD傳遞給啟動(dòng)進(jìn)程。類(lèi)型必須是“dgram”、“stream”或“seqPacket”。用戶(hù)和組默認(rèn)為0。“secLabel”是套接字的SELinux安全上下文。

user <username>

表示將用戶(hù)切換為<username>,當(dāng)前默認(rèn)為root。

Triggers

Triggers是可用于匹配某些類(lèi)型的事件,并觸發(fā)一個(gè)Action的字符串。

Triggers被細(xì)分為Event triggersProperty triggers。

Event triggers是由init可執(zhí)行文件中的trigger命令或QueueEventTrigger()函數(shù)觸發(fā)的字符串。它們的形式是一個(gè)簡(jiǎn)單的字符串,比如bootlate-init。

Property triggers是命名屬性將值更改為給定的新值或命名屬性將值更改為任何新值時(shí)觸發(fā)的字符串。它們分別以Property:<name><value>Property:<name>=*的形式出現(xiàn)。Property triggers還會(huì)在init的初始啟動(dòng)階段被觸發(fā)。

一個(gè)Action可以有多個(gè)Property triggers,但可能只有一個(gè)Event triggers。

例如:

onboot&&properties:a=b定義了一個(gè)只有當(dāng)boot Event triggers發(fā)生并且屬性a等于b時(shí)才執(zhí)行的Action

on property:a=b && property:c=d 定義了一個(gè)執(zhí)行三次的Action

  • 在 initial boot 期間, 如果 property a=b 且 property c=d。
  • 當(dāng)property c已經(jīng)等于d時(shí),property a轉(zhuǎn)換為b值。
  • 當(dāng)property a已經(jīng)等于b時(shí),property c轉(zhuǎn)換為d值。

Commands

bootchart [start|stop]

start or stop bootchart,bootchart是用于記錄開(kāi)機(jī)時(shí)進(jìn)程啟動(dòng)時(shí)間的工具。

chmod <octal-mode> <path>

更改文件訪問(wèn)權(quán)限。

chown <owner> <group> <path>

更改文件所有者和組。

class_start <serviceclass>

如果指定類(lèi)的Service尚未運(yùn)行,則啟動(dòng)它們。

class_stop <serviceclass>

如果指定類(lèi)的Service正在運(yùn)行,則停止并禁用它們。

class_reset <serviceclass>

如果指定類(lèi)的Service正在運(yùn)行,則停止它們,但是不禁用它們。它們可以使用class_start重新啟動(dòng)。

class_restart <serviceclass>

重新啟動(dòng)指定類(lèi)的Service。

copy <src> <dst>

復(fù)制一份文件。通常用于二進(jìn)制/大數(shù)據(jù)文件。

enable <servicename>

將disable的Service轉(zhuǎn)換為enable的Service。如果Service應(yīng)該被執(zhí)行,它將立即啟動(dòng)。

exec [ <seclabel> [ <user> [ &lt;group>\* ] ] ] -- <command> [ <argument>\* ]

用給定的參數(shù)fork并執(zhí)行command。在這個(gè)command完成之前,不會(huì)運(yùn)行其他命令。SecLabel可以用-來(lái)表示默認(rèn)值。

mkdir <path> [mode] [owner] [group]

在PATH上創(chuàng)建一個(gè)目錄,默認(rèn)權(quán)限為755,并由root用戶(hù)和root組擁有。

restart <service>

重啟正在運(yùn)行的Service。

start <service>

如果Service尚未運(yùn)行,則啟動(dòng)該Service。請(qǐng)注意,這是異步的操作。

trigger <event>

觸發(fā)一個(gè)Event。

write <path> <content>

打開(kāi)路徑為PATH的文件,并使用write()向其寫(xiě)入一個(gè)字符串。如果該文件不存在,則將創(chuàng)建該文件。

Imports

import <path>

解析init配置文件,擴(kuò)展當(dāng)前配置。如果PATH是一個(gè)目錄,則該目錄中的每個(gè)文件都被解析為一個(gè)配置文件,但它不是遞歸操作,嵌套目錄不會(huì)被解析。

以上就是Android 10 啟動(dòng)分析之init語(yǔ)法詳解的詳細(xì)內(nèi)容,更多關(guān)于Android 10 啟動(dòng)init語(yǔ)法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論