Android init.rc的readme.txt翻译
这是一篇自己胡乱翻译的,翻译的可能会有错误,但是以自己目前对kernel的了解只能做到这样了,希望以后自己会有所成长,然后再次看到这篇翻译的时候莞尔一笑.
Android Init Language
Android Init语言包含四种类型的关键字:Action
,Commands
,Services
和Options
以#开头的行是注释Action
和Services
声名一个新的section,所有的commands
和options
都属于靠的最近的section.在第一个section之前的commands
和services
都被忽略
每一个Actions
和Services
都有独立的名字,如果有相同名字的actions
和services
被声名,那这个section将被当成一个错误忽略掉.
Actions
Actions
就是一组commands的队列,它有一个用于决定何时执行此action
的触发器,当actions
的触发器满足条件的时候,此actions
被添加到执行队列(除非该队列已经有了此action)
每一个被添加到队列中的action
都是按顺序被移除队列,每一个此action中command
都会被顺序执行.Init通过执行actions中的commands
来处理其他活动(如设备创建/销毁,属性设置,重新启动和平进程)
Actions
的形式如下:1
2
3
4on <trigger>
<command>
<command>
<command>
Services
Services
是初始化加载和重启时候的程序,Services
的格式如下:1
2
3
4service <name> <pathname> [ <argument> ]*
<option>
<option>
...
Options
Options
可以修改services
的属性,它们决定init何时以何种方式执行service1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28critical
这是一个设备临界service,如果它在4分钟内存在超过4次,那该设备会reboot到recovery模式
disabled
有disabled参数的services不能用class start 的方式执行,只能通过start service name的方式执行.
setenv <name> <value>
就是设置环境变量
socket <name> <type> <perm> [ <user> [ <group> ] ]
在/dev/socket下创建一个unix domain类型的socket,并把描述符fd传给进程,type必须是"dgram", "stream"
或者 "seqpacket".User和group默认为0.
user <username>
执行该service之前切换用户,目前默认是root.
group <groupname> [ <groupname> ]*
执行该service之前切换group,目前默认是root.
oneshot
当service存在,该service不会重启
class <name>
特殊的class name,可以通过class_start和class_stop同意启动和停止,默认是default.
(PS:注意上面提到过的disabled参数)
onrestart
service重启时执行一条command
Triggers
触发器是一个字符串,它可以用来匹配特定类型的事件,并用来导致一个动作发生1
2
3
4
5
6
7
8
9
10
11
12boot
这是当init开始后的第一个触发器
<name>=<value>
当name被设置成指定的<value>的时候,这个触发器被触发.
device-added-<path>
device-removed-<path>
当一个设备节点被添加或者被移除的时候触发该触发器.
service-exited-<name>
当指定的services存在的时候触发该触发器
Commands
1 | exec <path> [ <argument> ]* |
Properties
Init updates some system properties to provide some insight into what it’s doing:1
2
3
4
5
6
7
8init.action
等于当前执行的action的名字,如果没有没有则为空
init.command
等于当前被执行的command,如果没有则为空
init.svc.<name>
等于指定service的当前状态(包括"stopped", "running", "restarting")
That’s all,Thank you