Android Init Language(RC文件)介绍
Posted 林多
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Init Language(RC文件)介绍相关的知识,希望对你有一定的参考价值。
android Init Language介绍
基本概念
什么是rc文件?
rc文件,是用Android Init Language编写的特殊文件。用这种语法编写的文件,统一用".rc"后缀。
所有rc文件,不会被编译/链接。它是配置文件,不是程序,是一种用于android init的配置文件。
真正加载rc文件,并进行解析,做事情的是 Init进程。
Android Init进程用rc做了什么?
大体有一下几点:
- 创建各种文件,并分配DAC权限
- 启动服务
- 监听属性
相关内容
- Android Init进程
源码路径:
system/core/init/init.cpp
加载并解析 rc文件函数:
static void LoadBootScripts(省略)
Android RC文件应用
- android官方说明
system/core/init/README.md
Android rc文件语法解析
- 这个语法解析,其实是 android init language的语法解析。
Line-oriented
- 一般说语言,就有面向-xxx的一个概念。如java是面向对象的。
- Android Init Language是Line-oriented的。所谓 L-O,指线向导,指这种语言是一行为单位运作的。工作方式与操作系统的命令行相似。
on init
# 一行为单位,执行task
symlink /system/bin /bin
语法组成
AIL(Android Init Language)由5部分组成
- Action(行为)
- Commands(命令)
- Services(服务)
- Options(选项)
- Imports(导入)
此外,还有两点概念。
- Comments(注释):以#开头的行,表示注释。
# linduo test(我是一条注释)
mkdir /data/linduo 0777 root root
- Section(段落/分组):
Action(行为)和Services(服务)可以声明一个新的Section。
Command和Option属于最近的分组。
不属于分组的Command和Option将被忽略。
Service名字唯一,第二个同名的Service将被忽略并提示错误信息(所有RC文件)。
Action
- 行为是一系列命令的开始,或者说行为是一系列Command的集合。
- 每个行为拥有一个Trigger,Trigger用来决定Action什么时候被执行。
- 当Trigger被触发,相应的Action会被添加到任务队列中(队尾插入),如果已再队列中则忽略。
- Action中的每条命令,将会被顺序取出,并执行。
语法格式:
on <trigger> [&& <trigger>]*
<command>
<command>
例子:
on zygote-start && property:ro.crypto.state=unsupport
start netd
Services
Services指一些Programs(程序),这些程序由Init启动/重启(开机启动,或者特定的时间点)
语法格式:
service <name> <pathname> [ <argument> ]*
<option>
<option>
<option>
例子:
service vold /system/bin/vold \\
–blkid_context=u:r:blkid:s0 –blkid_untrusted_context=u:r:blkid_untrusted:s0 \\
–fsck_context=u:r:fsck:s0 –fsck_untrusted_context=u:r:fsck_untrusted:s0
# Service类别
class core
# io调度优先级
ioprio be 2
# 进程pid写入特定文件
writepid /dev/cpuset/foreground/tasks
# 设定shutdown行为
shutdown critical
# 设定group
group root reserved_disk
Option和Command
- Option是Services的修饰符(选项),通过Option告知Init如何对待Services。
- Command,指命令。Action是命令的集合。
- Android Init Language支持的Option和Command见
system/core/init/README.md
Trigger
Trigger,触发器。其本质上是字符串,用于匹配包含该字符串的事件(Event).
Triiger分为:
- 属性触发器: 属性变为属性值指定的属性值时触发。
- 事件触发器:通过QueueEventTrigger函数(c++),或 trigger command触发。
on xxx:
trigger sss
Trigger,可以由多个属性触发器 + 一个事件触发器组成(有且仅有一个事件触发器)
import
引入其他rc文件。(类似于 java的import 、c++的include)
以上是关于Android Init Language(RC文件)介绍的主要内容,如果未能解决你的问题,请参考以下文章
Android Init Language(android初始化语言)
Android 进阶——系统启动之Android init.rc脚本解析