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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Android init.rc介绍及其语法

發布時間:2023/12/16 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android init.rc介绍及其语法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

init.rc介紹

init.rc是一個可配置的初始化文件,通常定制廠商可以配置額外的初始化配置,init.%PRODUCT%.rc,如init.qcom.rc。

init.rc加載

init.rc是在/system/core/init/init.cpp中的mian()讀取的,按行解析,包含一些用空格隔開的關鍵字、命令、腳本

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文件一樣,沒有執行順序的,解析器通過讀這個文件獲取想要的數據,包括service,action等

init.rc包含4種狀態類別:Actions/Commands/Services/Options

當聲明一個service或者action的時候,它將隱式聲明一個section,它之后跟隨的command或者option都將屬于這個section,action和service不能重名,否則忽略為error

如果關鍵字中有空格,處理方法類似于C語言,使用/表示轉義,使用“”防止關鍵字被斷開,另外注意/在末尾表示換行,#開頭的表示注釋

  • actions就是在某種條件下觸發一系列的命令,通常有一個trigger,形式如:
on <trigger><command><command>
  • service是一個以 service開頭,由init進程啟動,一般運行于另外一個init子進程的程序服務,啟動service前需要判斷對應的可執行文件是否存在。init生成的子進程,定義在rc文件,其中每一個service,在啟動時會通過fork方式生成子進程。
#name:服務名 pathname:當前服務對應的程序位置 argument:可選參數 option:當前服務設置的選項 service <name> <pathname> [ <argument> ]*<option><option>
  • option是service的修飾詞,主要包括:
critical 表示如果服務在4分鐘內存在多于4次,則系統重啟到recovery modedisabled 表示服務不會自動啟動,需要手動調用名字啟動setEnv <name> <value> 設置啟動環境變量socket <name> <type> <permission> [<user> [<group>]] 開啟一個unix域的socket,名字為/dev/socket/<name> , <type>只能是dgram或者stream,<user><group>默認為0user <username> 表示將用戶切換為<username>,用戶名已經定義好了,只能是system/rootgroup <groupname> 表示將組切換為<groupname>oneshot 表示這個service只啟動一次class <name> 指定一個要啟動的類,這個類中如果有多個service,將會被同時啟動。默認的class將會是“default”onrestart 在重啟時執行一條命令
  • trigger又被細分為事件觸發器(event trigger)和屬性觸發器(property trigger)

事件觸發器可由"trigger"命令或初始化過程中通過QueueEventTrigger()觸發,通常是一些事先定義的簡單字符串,例如:boot,late-init
屬性觸發器是當指定屬性的變量值變成指定值時觸發,其格式為property:=*

early-init 初始化之前觸發init 初始化時觸發late-init 初始化之后觸發boot 當/init.conf加載完畢時<name>=<value><name>被設置為<value>時device-added-<path> 設備<path>被添加時device-removed-<path> 設備<path>被移除時service-exited-<name> 服務<name>退出時
  • command主要包括:
exec <path> [ <argument> ]* 執行一個<path>指定的程序export <name> <value> 設置一個全局變量ifup <interface> 使網絡接口<interface>連接import <filename> 引入其他的配置文件hostname <name> 設置主機名chdir <directory> 切換工作目錄chmod <octal-mode> <path> 設置訪問權限chown <owner> <group> <path> 設置用戶和組chroot <directory> 設置根目錄class_start <serviceclass> 啟動類中的serviceclass_stop <serviceclass> 停止類中的servicedomainname <name> 設置域名insmod <path> 安裝模塊mkdir <path> [mode] [owner] [group] 創建一個目錄,并可以指定權限,用戶和組mount <type> <device> <dir> [ <mountoption> ]* 加載指定設備到目錄下 <mountoption> 包括"ro", "rw", "remount", "noatime"setprop <name> <value> 設置系統屬性setrlimit <resource> <cur> <max> 設置資源訪問權限start <service> 開啟服務stop <service> 停止服務symlink <target> <path> 創建一個動態鏈接sysclktz <mins_west_of_gmt> 設置系統時鐘trigger <event> 觸發事件write <path> <string> [ <string> ]* 向<path>路徑的文件寫入多個<string>

參考

https://www.cnblogs.com/senior-engineer/p/4848872.html
https://blog.csdn.net/zhonglunshun/article/details/78615980

總結

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

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