[Android的Init进程一]启动脚本init.rc

一.init.rc的基本组成单位

init.rc文件是以section为单位组织的。它的格式如下:

section关键字 xxx
	xxx
	xxx
	xxx

由上可看出section可以包含多行,section的关键字有三个on、service、import。

二.init.rc的三个关键字

1.on

on <trigger> [&& <trigger>]*
   <command>
   <command>
   <command>

trigger分为事件触发器和属性触发器。

  • 事件触发器:由init的QueueEventTrigger函数匹配字符串触发,比如"early-init"、“late-init”
  • 属性触发器:当修改属性时触发,这里分两种
    # 第一种,在"属性"设置为指定的值"value"时触发
    on property:<name>=<value>
    
    # 第二种,修改了"属性"就会触发
    on property:<name>=*
    

command命令:本来想列出来,但是是在太多了。授人以鱼不如授人以渔(其实是懒),直接到/system/core/init/readme.txt下查看吧

2.services

service <name> <pathname> [ <argument> ]*
    <option>
    <option>

option影响init运行服务的方式和时间

option说明
critical这是一个设备关键服务。如果在4分钟内退出超过4次,设备将重新启动进入恢复模式。
disabled这个服务不会自动启动它的类。它必须明确地按名称启动。
setenv <name> <value>在启动的进程中设置环境变量
socket <name> <type> <perm> [ <user> [ <group> [ <seclabel> ] ] ]创建一个名为/dev/socket/<name>的unix域套接字并传递它的fd指向启动的进程。
<type>必须是"dgram", “stream"或"seqpacket”。
<user>和<group> 默认为0。
'seclabel’是套接字的SELinux安全上下文。它默认为服务安全上下文,由seclabel指定或基于服务可执行文件的安全上下文
user <username>表示将用户切换为<username>
group <groupname> [ <groupname> ]*表示将组切换为<groupname>
seclabel <seclabel>selinux用的,转换服务的安全上下文。如果没指定,就默认为init的上下文
oneshot当服务退出时,不要重新启动服务。
class <name>指定一个要启动的类,这个类中如果有多个service,将会被同时启动。默认的class将会是“default”
onrestart在重启时执行一条命令

3.import

相当包含另外一些section。格式:

import <rc path>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值