1. init.rc 中Service的三种启动方式?
a. 自动启动;即属性值不含有disable的service,会在init进程启动过程中启动。
b. 通过属性触发来启动;通过设置属性,当属性满足的时候,启动service;
c. 通过ctl.start来启动。
其中a是在on boot中通过command
class_start core
class_start main
来启动。
b 的例子如下:
on property:ro.kernel.qemu=1
start adbd
c的例子如下:
service console /system/bin/sh
class core
console
disabled
user shell
group log
设置console为disable,然后通过property_set("ctl.start", name)来启动。
ServiceManager.cpp封装了start,stop,还有isRunning函数,分别用来启动一个service,停止一个service,获取service的状态。
2. init.rc文件的解析方式
init.rc文件的解析是以行为单位,以空格或者tab键位分割符号。
每一行的开头,都是一个关键字,对应于action,command,service或者option中的一个。余下的就是参数。