Android Init Language,这里简称为AIL
AIL由如下4部分组成。
1. 动作(Actions)
2. 命令(Commands)
3. 服务(Services)
4. 选项(Options)
on
5类触发器。
1. boot
这是init执行后第一个被触发Trigger,也就是在 /init.rc被装载之后执行该Trigger
2. =
当属性被设置成时被触发。 例如,
on property:vold.decrypt=trigger_reset_main
class_reset main
3. device-added-
当设备节点被添加时触发
4. device-removed-
当设备节点被移除时添加
5. service-exited-
会在一个特定的服务退出时触发
Action
后需要跟若干个命令,这些命令如下:
1. exec [ ]*
创建和执行一个程序()。在程序完全执行前,init将会阻塞。由于它不是内置命令,应尽量避免使用exec ,它可能会引起init执行超时。
2. export
在全局环境中将 变量的值设为。(这将会被所有在这命令之后运行的进程所继承)
3. ifup
启动网络接口
4. import
指定要解析的其他配置文件。常被用于当前配置文件的扩展
5. hostname
设置主机名
6. chdir
改变工作目录
7. chmod
改变文件的访问权限
8. chown
更改文件的所有者和组
9. chroot
改变处理根目录
10. class_start
启动所有指定服务类下的未运行服务。
11 class_stop
停止指定服务类下的所有已运行的服务。
12. domainname
设置域名
13. insmod
加载指定的驱动模块
14. mkdir [mode][owner] [group]
创建一个目录 ,可以选择性地指定mode、owner以及group。如果没有指定,默认的权限为755,并属于root用户和 root组。
15. mount
[ ]*
试图在目录
16. setkey
保留,暂时未用
17. setprop
将系统属性的值设为。
18. setrlimit
设置的rlimit (资源限制)
19. start
启动指定服务(如果此服务还未运行)。
20.stop
停止指定服务(如果此服务在运行中)。
21. symlink
创建一个指向的软连接。
22. sysclktz
设置系统时钟基准(0代表时钟滴答以格林威治平均时(GMT)为准)
23. trigger
触发一个事件。用于Action排队
on property:vold.decrypt=trigger_post_fs_data
trigger post-fs-data
on post-fs-data
mkdir /data/media 0770 media_rw media_rw
#mkdir /mnt/media/sdcard 0770 media_rw media_rw
24. wait [ ]
等待一个文件是否存在,当文件存在时立即返回,或到指定的超时时间后返回,如果不指定,默认超时时间是5秒。
25. write [ ]*
向指定的文件写入一个或多个字符串。
Services
Services (服务)是一个程序,他在初始化时启动,并在退出时重启(可选)
service [ ]*
service servicemanager /system/bin/servicemanager
class core
user system
group system
critical
onrestart restart zygote
onrestart restart media
onrestart restart surfaceflinger
onrestart restart drm
Services的选项是服务的修饰符,可以影响服务如何以及怎样运行。服务支持的选项如下:
1. critical
表明这是一个非常重要的服务。如果该服务4分钟内退出大于4次,系统将会重启并进入 Recovery (恢复)模式。
2. disabled
表明这个服务不会同与他同trigger (触发器)下的服务自动启动。该服务必须被明确的按名启动。
3. setenv
在进程启动时将环境变量设置为。
4. socket [ [ ] ]
Create a unix domain socketnamed /dev/socket/ and pass
its fd to the launchedprocess. must be”dgram”, “stream” or “seqpacket”.
User and group default to0.
创建一个unix域的名为/dev/socket/ 的套接字,并传递它的文件描述符给已启动的进程。 必须是 “dgram”,”stream” 或”seqpacket”。用户和组默认是0。
5. user
在启动这个服务前改变该服务的用户名。此时默认为 root。
6. group [ ]*
在启动这个服务前改变该服务的组名。除了(必需的)第一个组名,附加的组名通常被用于设置进程的补充组(通过setgroups函数),档案默认是root。
7. oneshot
服务退出时不重启。
8. class
指定一个服务类。所有同一类的服务可以同时启动和停止。如果不通过class选项指定一个类,则默认为”default”类服务。
9. onrestart
当服务重启,执行一个命令(下详)。
service类型的section标识了一个service(或者说可执行程序), 那这个service什么时候被执行呢?是在
class_start 这个命令被执行的时候,这个命令行总是存在于某个on类型的section中,“class_start core”这样一条命令被执行,就会启动类型为core的所有service。如:
class_start 在init.rc
on boot
...
class_start core
class_start main
class_start late_start
service ...
class main
....