在init程序中 parser.ParseConfig("/init.rc");
init.rc AOSP/system/core/rootdir/init.rc
android初始化語言
//部分代碼截取
...
import /init.${ro.hardware}.rc
import /vendor/etc/init/hw/init.${ro.hardware}.rc
import /init.usb.configfs.rc
import /init.${ro.zygote}.rc
on early-init
# Set init and its forked children's oom_adj.
write /proc/1/oom_score_adj -1000
...
主要包含5中類型語句 Action、Command、Service、Option、Import
[Import] Import:導入腳本
[Action] on: on early-init、on early-boot、on boot、on init、on trigger
on <trigger> [&& <trigger>]* //設定觸發器
<command>
<command> //觸發後執行的指令
on property:sys.boot_from_charger_mode=1
class_stop charger
trigger late-init
[Service] Service:建立service
service <name> <pathname> [<arg>]* //service名字 執行程式路徑 傳遞參數
<option>
<option>
...
//例子
user root //使用者
group root readproc //使用者組
oneshot/disable //隻啟動一次/服務是關閉的
//這裡以 init.zygote64.rc 為例
service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server
class main
priority -20
user root
group root readproc
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
...
[setprop]
setprop net.tcp.default_init_rwnd 60
generic_x86_64:/ # get prop
/system/bin/sh: get: not found
127|generic_x86_64:/ # get proc
/system/bin/sh: get: not found
127|generic_x86_64:/ # getproc
/system/bin/sh: getproc: not found
127|generic_x86_64:/ # getprop
[dalvik.vm.appimageformat]: [lz4]
[dalvik.vm.dex2oat-Xms]: [64m]
[dalvik.vm.dex2oat-Xmx]: [512m]
[dalvik.vm.dexopt.secondary]: [true]
[dalvik.vm.heapsize]: [192m]
[dalvik.vm.image-dex2oat-Xms]: [64m]
[dalvik.vm.image-dex2oat-Xmx]: [64m]
generic_x86_64:/ # getprop | grep "sys.sysctl.extra_free_kbytes"
[sys.sysctl.extra_free_kbytes]: [4500]
值得注意的是Android8.0 中對init.rc做了拆分每一個服務對應一個rc檔案,例如Zygote啟動腳本在 init.zygoteXX.rc中定義
init.zygote64.rc AOSP/system/core/rootdir/init.rc
service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server
class main
priority -20
user root
group root readproc
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
onrestart restart audioserver
onrestart restart cameraserver
onrestart restart media
onrestart restart netd
onrestart restart wificond
writepid /dev/cpuset/foreground/tasks
代碼分析
通知init程序建立zygote程序
程序執行程式的路徑為 /system/bin/app_process64
後面傳遞進去的參數 -Xzygote /system/bin --zygote --start-system-server
class name: 指的是zygote程序的classname為main