《Android的设计与实现:卷I》——第3章 3.4init.rc文件解析过程

    xiaoxiao2021-07-08  215

    3.4 init.rc文件解析过程

    init.rc文件按照一定的格式组织,要分析init.rc文件的解析过程,首先要熟悉它的格式。init.rc的文件格式由Android初始化语言(Android Init Language)定义,所以这里首先分析Android初始化语言。

    3.4.1 Android初始化语言

    Android初始化语言定义了六个基本概念、两个基本关键字和多个指令关键字。

    六个基本概念分别是Section、Action、Service、Trigger、Command、Option。

    两个基本关键字是on和service。

    指令关键字则定义在Trigger、Command和Option中。

    其帮助文档位于/system/core/init/readme.txt,其关键字定义位于/system/core/init/keyword.h。关键字on用来声明一个Action。

    关键字service用来声明一个Service。

    每一个Action或者Service都隐含是一个Section,init.rc就是由不同的Section组成的。

    Command是最小的功能单位,代表一个Linux命令或者一个方法调用。

    Trigger代表一个自定义的触发条件,用来触发Action的执行,也可以认为它是Action的名称。

    一个Action便是由关键字on声明、由Trigger触发的一组Command序列。

    Option是Service的修饰符,由它来指定何时、如何启动Service程序。

    每一个Service都是init进程的子进程,由关键字service、服务名、服务对应的命令的路径、命令的参数和Option组成,代表一些要在初始化阶段启动的程序。

    下面将分别介绍上述几个基本概念的组成格式。

    1.ActionAction的格式如下:

    Android初始化语言中定义Action的Trigger如表3-1所示。

    除了表3-1中列举的Trigger外,还有在代码中显式使用的Trigger,它们并没有列入Android初始化语言定义的Trigger中。比如可以在init.rc中搜索到early-init、init、charger、nonencrypted、post-fs-data、post-fs、fs等Trigger,这些Trigger其实是当作Action名字使用。

    2.Command

    Android初始化语言中定义的Command如表3-2所示。

    3.ServiceService的格式如下:

    4.OptionAndroid初始化语言中定义的Option如表3-3所示。

    Section是一个虚拟的概念,它在init.rc中并不显式存在。每一个Action或Service隐含是一个Section,每一个Section代表一个完整的功能,init.rc便是由不同的Section组成的。


    最新回复(0)