AIL

作者: gbmaotai | 来源:发表于2018-10-23 09:14 被阅读0次

Android Init Language,这里简称为AIL
AIL由如下4部分组成。

1. 动作(Actions)

2. 命令(Commands)

3. 服务(Services)

4. 选项(Options)

on <trigger>
<command>
<command>
<command>

5类触发器。

1. boot

这是init执行后第一个被触发Trigger,也就是在 /init.rc被装载之后执行该Trigger

2. <name>=<value>

当属性<name>被设置成<value>时被触发。 例如,

on property:vold.decrypt=trigger_reset_main
    class_reset main
3. device-added-<path>

当设备节点被添加时触发

4. device-removed-<path>

当设备节点被移除时添加

5. service-exited-<name>

会在一个特定的服务退出时触发

Action

后需要跟若干个命令,这些命令如下:

1. exec <path> [<argument> ]*

创建和执行一个程序(<path>)。在程序完全执行前,init将会阻塞。由于它不是内置命令,应尽量避免使用exec ,它可能会引起init执行超时。

2. export <name> <value>

在全局环境中将 <name>变量的值设为<value>。(这将会被所有在这命令之后运行的进程所继承)

3. ifup <interface>

启动网络接口

4. import <filename>

指定要解析的其他配置文件。常被用于当前配置文件的扩展

5. hostname <name>

设置主机名

6. chdir <directory>

改变工作目录

7. chmod <octal-mode><path>

改变文件的访问权限

8. chown <owner><group> <path>

更改文件的所有者和组

9. chroot <directory>

改变处理根目录

10. class_start<serviceclass>

启动所有指定服务类下的未运行服务。

11 class_stop<serviceclass>

停止指定服务类下的所有已运行的服务。

12. domainname <name>

设置域名

13. insmod <path>

加载<path>指定的驱动模块

14. mkdir <path> [mode][owner] [group]

创建一个目录<path> ,可以选择性地指定mode、owner以及group。如果没有指定,默认的权限为755,并属于root用户和 root组。

15. mount <type> <device> <dir> [<mountoption> ]*

试图在目录<dir>挂载指定的设备。<device> 可以是mtd@name的形式指定一个mtd块设备。<mountoption>包括 "ro"、"rw"、"re

16. setkey

保留,暂时未用

17. setprop <name><value>

将系统属性<name>的值设为<value>。

18. setrlimit <resource> <cur> <max>

设置<resource>的rlimit (资源限制)

19. start <service>

启动指定服务(如果此服务还未运行)。

20.stop<service>

停止指定服务(如果此服务在运行中)。

21. symlink <target> <path>

创建一个指向<path>的软连接<target>。

22. sysclktz <mins_west_of_gmt>

设置系统时钟基准(0代表时钟滴答以格林威治平均时(GMT)为准)

23. trigger <event>

触发一个事件。用于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 <path> [<timeout> ]

等待一个文件是否存在,当文件存在时立即返回,或到<timeout>指定的超时时间后返回,如果不指定<timeout>,默认超时时间是5秒。

25. write <path> <string> [ <string> ]*

向<path>指定的文件写入一个或多个字符串。

Services

Services (服务)是一个程序,他在初始化时启动,并在退出时重启(可选)
service <name> <pathname> [ <argument> ]*
<option>
<option>

 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 <name><value>

在进程启动时将环境变量<name>设置为<value>。

4. socket <name><type> <perm> [ <user> [ <group> ] ]

Create a unix domain socketnamed /dev/socket/<name> and pass
its fd to the launchedprocess. <type> must be"dgram", "stream" or "seqpacket".
User and group default to0.
创建一个unix域的名为/dev/socket/<name> 的套接字,并传递它的文件描述符给已启动的进程。<type> 必须是 "dgram","stream" 或"seqpacket"。用户和组默认是0。

5. user <username>

在启动这个服务前改变该服务的用户名。此时默认为 root。

6. group <groupname> [<groupname> ]*

在启动这个服务前改变该服务的组名。除了(必需的)第一个组名,附加的组名通常被用于设置进程的补充组(通过setgroups函数),档案默认是root。

7. oneshot

服务退出时不重启。

8. class <name>

指定一个服务类。所有同一类的服务可以同时启动和停止。如果不通过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
 ....

相关文章

网友评论

      本文标题:AIL

      本文链接:https://www.haomeiwen.com/subject/ncdozftx.html