在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 [&& ]* //设置触发器
//触发后执行的命令
on property:sys.boot_from_charger_mode=1
class_stop charger
trigger late-init
[Service] Service:创建service
service []* //service名字 执行程序路径 传递参数
//这里以 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