Android init.rc介绍及其语法
init.rc介紹
init.rc是一個可配置的初始化文件,通常定制廠商可以配置額外的初始化配置,init.%PRODUCT%.rc,如init.qcom.rc。
init.rc加載
init.rc是在/system/core/init/init.cpp中的mian()讀取的,按行解析,包含一些用空格隔開的關(guān)鍵字、命令、腳本
static void LoadBootScripts(ActionManager& action_manager, ServiceList& service_list) {Parser parser = CreateParser(action_manager, service_list);std::string bootscript = GetProperty("ro.boot.init_rc", "");if (bootscript.empty()) {parser.ParseConfig("/init.rc");if (!parser.ParseConfig("/system/etc/init")) {late_import_paths.emplace_back("/system/etc/init");}if (!parser.ParseConfig("/product/etc/init")) {late_import_paths.emplace_back("/product/etc/init");}if (!parser.ParseConfig("/odm/etc/init")) {late_import_paths.emplace_back("/odm/etc/init");}if (!parser.ParseConfig("/vendor/etc/init")) {late_import_paths.emplace_back("/vendor/etc/init");}} else {parser.ParseConfig(bootscript);} }init.rc語法
源碼文檔介紹Android Init Language:system/core/init/README.md
init.rc只是一個語法文件,就像一個xml文件一樣,沒有執(zhí)行順序的,解析器通過讀這個文件獲取想要的數(shù)據(jù),包括service,action等
init.rc包含4種狀態(tài)類別:Actions/Commands/Services/Options
當聲明一個service或者action的時候,它將隱式聲明一個section,它之后跟隨的command或者option都將屬于這個section,action和service不能重名,否則忽略為error
如果關(guān)鍵字中有空格,處理方法類似于C語言,使用/表示轉(zhuǎn)義,使用“”防止關(guān)鍵字被斷開,另外注意/在末尾表示換行,#開頭的表示注釋
- actions就是在某種條件下觸發(fā)一系列的命令,通常有一個trigger,形式如:
- service是一個以 service開頭,由init進程啟動,一般運行于另外一個init子進程的程序服務(wù),啟動service前需要判斷對應的可執(zhí)行文件是否存在。init生成的子進程,定義在rc文件,其中每一個service,在啟動時會通過fork方式生成子進程。
- option是service的修飾詞,主要包括:
- trigger又被細分為事件觸發(fā)器(event trigger)和屬性觸發(fā)器(property trigger)
事件觸發(fā)器可由"trigger"命令或初始化過程中通過QueueEventTrigger()觸發(fā),通常是一些事先定義的簡單字符串,例如:boot,late-init
屬性觸發(fā)器是當指定屬性的變量值變成指定值時觸發(fā),其格式為property:=*
- command主要包括:
參考
https://www.cnblogs.com/senior-engineer/p/4848872.html
https://blog.csdn.net/zhonglunshun/article/details/78615980
總結(jié)
以上是生活随笔為你收集整理的Android init.rc介绍及其语法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hash的适用范围
- 下一篇: 百度富媒体编辑器 使用