Android启动过程研究(二:AIL描述的init.rc)

来源:互联网 发布:美工自学教程 编辑:程序博客网 时间:2024/05/16 05:03

在Android系统初始化时,init进程通过读取init.rc文件来设置环境变量,运行相应程序。而init.rc是用Android Init Language(AIL,android初始化语言)编写的。AIL可以调用parse_config_file函数来解释执行。

一、AIL包含四种类型的声明:

1/ Actions            (动作)

2/ Commands    (命令)

3/ Services          (服务)

4/ Options            (选项)

二、AIL的语法规则是:

1/ AIL以行断句,以空格断字。

2/ 以#开始的行为注释。

3/ Action 和 Service 隐含声明一个新段落,所有该段落下的Command 和 Option的声明从属于该段落。

4/ Action 与 Service 的名称是唯一的,在它们之后声明的重名类(不论类型)将视为无效。

三、Actions

Actions是一系列命令的集合,通过一个以on开头的触发器决定何时执行命令集合。当on触发器被触发(事件发生)时,该action将被添加到执行队列。当action被执行时意味着其命令集合被依次执行。

下面是触发器事件列表:


下面是命令列表:


四、Options是Services的修饰,影响着init进程何时、如何运行service。下面的Options列表


五、进程的终止与再启动

init进程读取并分析init.rc文件,获取Services(服务列表),而后将依据服务列表依次启动服务子进程。

init进程启动的主要进程如下:

sh

adbd:android调试桥

servicemanager:重要,负责管理系统服务

vold:Volume Dameon,用于挂载/管理USB存储或SD卡设备

palymp3:输出启动音

在init启动的诸多进程中,除了一小部分外,大部分进程出现意外终止时,init进程都要重启它们。


特别注意:

1、源码/system/core/rootdir/下的一系列.rc文件最终会编译到ramdisk.img中,随kernel一起打包成boot.img。所以对这些启动文件的修改必须通过刷boot.img才可以生效。

2、rc文件中的service都是以独立进程运行的,属于Android native service,通过ps命令可以查到。他们的ppid都是1,即由init进程启动。

























0 0
原创粉丝点击