【转载】init.rc语法详解

init.rc脚本的4种类型

  • Action(动作)
  • Commands(命令)
  • Services(服务)
  • Options(选项)

Action

格式:
on < trigger > ##触发条件
< command1 > ## 执行命令
< command2 > ##可以执行多个命令
< command3 >

比如系统源码中的:
on property:sys.boot_from_charger_mode=1
class_stop charger
trigger late-init

当相应的事件发生时,系统会对init.rc中的各进行匹配,只要发现符合条件的Action,就会把它加入”命令执行队列”的尾部,(除非这个Action在队列中已经存在)。然后系统在对这些命令按顺序执行。

Commands

trigger

Trigger Description
bott 这是init程序启动后出发的第一个事件
< name > = < value > 当属性< name >满足特定< value >时触发
device-added-< path> 当设备节点添加/删除时触发此事件
service-exited-< name > 当指定的服务< name >存在时触发

Commands

Command Description
exec < path > [< argument >]* Fork并执行一个程序,其路径为< path >,这条命令将阻塞直到该程序启动完成,因此他有可能造成init程序在某个点不停的等待。
export < name >< value > 设置某个环境变量< name >的值为< value >,这是对全局有效的,即其后的所有进程都将继承这个变量。
ifup < interface > 使网络接口< interface >成功连接。
import < filename > 解析另外一个配置文件,名为< filename >,以扩展当前配置。
hostname < name > 设置主机名为< name >
chdir < directory > 更改工作目录为< directory >
chmod < octal-modc > 更改文件访问权限
chown < owner >< group >< path > 更改文件所有者和组群
chroot < directory > 更改根目录位置
class_start < serviceclass > 启动由< servicesclass >类名指定的所有相关服务,如果他们不存在运行状态的话
class_stop < serviceclass > 停止所有由< serviceclass >指定的服务,如果他们当前正在运行的话
domainname < name > 设置域名
insmod < path > 在< path >路径上安装一个模块
mkdir < path >[mode][owner][group] 在< path >上新建一个目录
mount < type >< device >< dir >[mountoption] 尝试在指定路径上挂载一个设备
setkey 目前没有定义
setprop< name >< value > 设置系统属性< name >的值< value >
start < service > 这个命令将启动一个服务,如果他没有处于运行状态的话
stop < service > 这个命令将启动一个服务,如果他没有处于运行状态的话
symlink < target >< path > 创建一个< path >路径的连接,目标为< target >
sysclktz 设置基准时间,如果当前时间是GMT,这个值为0
trigger < event > 触发一个事件
write < path >< string >[ < string >]* 打开一个文件,并写入一个或多个字符串

Services

在特定选项的约束下呗init程序运行或者重启.
格式:
service < name >< pathname > [ < argument >]*
< option >
< option >

参数解释:
- name 表示此service的名称
- pathname 此service所在路径。
- argument 启动service所带的参数
- option 对此service的约束选项。

options

Services中的可用选项:

option Description
critical 表明这个对设备至关重要的服务,如果他在四分钟内退出超过4次,则设备将重启进入恢复模式
disable 此服务不会自动启动,而是需要通过显示调用服务名来启动
setenv < name >< value > 设置环境变量< name >为某个值< value >
socket < name >< type >< perm >[< user >[ < group >]] 创建一个名为/dev/socket/< name >的Unix domain socket,然后将他的fd值传给启动它的进程,有效的< type >值包括dgram,steam和seqpacket.而user和group的默认值是0
user < username > 在启动服务前将用户切换至< username >,默认情况下用户都是root
group < groupname >[< groupname >] 在启动服务将用户组切换至< groupname >
oneshot 当此服务退出时,不要主动去重启他
class < name > 为该服务指定一个class名,同一个class的所有服务必须同时自动或者停止,默认情况下服务的class名是”default”
onrestart 当此服务重启时,执行某些命令

英文描述参见:/system/core/init/readme.txt

init脚本中的关键字参见:system/core/init/keywords.h 

猜你喜欢

转载自blog.csdn.net/lgglkk/article/details/108945588
今日推荐