Android init.rc文件语法

rc文件语法是以行尾单位,以空格间隔的语法,以#开始代表注释行。rc文件主要包含Action、Service、command、Options,其中对于Action和Service的名称都是唯一的,对于重复的命名视为无效。

1.Action

Action实际上就是一组命令的名字而已。通过触发器trigger,即以on开头的语句来决定执行相应的service的时机,具体时机如下:

  1. on early-init ---在初始化早期阶段触发;
  2. oninit ---在初始化阶段触发;
  3. on late-init ---在初始化晚期阶段触发;
  4. on boot/charger ---当系统启动/充电时触发;
  5. on property:= ---当属性值满足条件时触发;

2.Service

服务以 service开头,由init进程启动,一般运行在init的一个子进程,所以启动service前需要判断对应的可执行文件是否存在。init生成的子进程,定义在rc文件,其中每一个service在启动时会通过fork方式生成子进程。
例如:service zygote /system/bin/app_process64代表的是服务名zygote,服务
执行的实际路径文件为 /system/bin/app_process64。

3.Command

on strigger目标>
<command>
<command>
<command>

例如 init.rc 中启动zygote :

on late-init
# Now we can start zygote for devices with file based encryption
trigger zygote-start

# to start-zygote in device's init.rc to unblock zygote start.
on zygote-start && property:ro.crypto.state=unencrypted
    wait_for_prop odsign.verification.done 1
    # A/B update verifier that marks a successful boot.
    exec_start update_verifier_nonencrypted
    start statsd
    start netd
    start zygote
    start zygote_secondary

常用的命令:

  1. class_start =service_class_ name> ---启动属于同一个class的所有服务;
  2. start <service name> ---启动指定的服务,若已启动则跳过;
  3. stop <service_name> ---停止正在运行的服务;
  4. setprop ---设置属性值;
  5. mkdir ---创建指定目录;
  6. symlink <sym_link> ---创建连接到的<symlink>符号链接;
  7. write ---向文件path中写入字符串;
  8. exec ---fork并执行,会阳塞init进程直到程序完毕;
  9. exec_start ---启动给定服务并停止处理其他init命令,直到它返回。该命令的功能类似于exec命令,但使用现有的服务定义来代替exec参数向量;
  10. exprot ---设定环境变量;
  11. loglevel ---设置log级别。

4.Options

Options是Service的可选项,与service配合使用。

  1. disabled ---不随class自动启动,只有根据service名才启动;
  2. oneshot: ---service退出后不再重启;
  3. user/group ---设置执行服务的用户/用户组,默认都是root;
  4. class ---设置所属的类名,当所属类启动/退出时,服务也启动/停止,默认为default;
  5. onrestart ---当服务重启时执行相应命令;
  6. socket ---创建名为/dev/socket/的socket;
  7. critical ---在规定时间内该service不断重启,则系统会重启并进入恢复模式;
  8. default ---意味着disabled=false, oneshot=false, critical=false。

如:android-12.0.0_r3/system/core/rootdir/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 reserved_disk
    socket zygote stream 660 root system
    socket usap_pool_primary stream 660 root system
    onrestart exec_background - system system -- /system/bin/vdc volume abort_fuse
    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
    critical window=${zygote.critical_window.minute:-off} target=zygote-fatal

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wake_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值