Android Init Language(RC文件)介绍

基本概念

什么是rc文件?

rc文件,是用Android Init Language编写的特殊文件。用这种语法编写的文件,统一用".rc"后缀。
所有rc文件,不会被编译/链接。它是配置文件,不是程序,是一种用于android init的配置文件。
真正加载rc文件,并进行解析,做事情的是 Init进程。

Android Init进程用rc做了什么?

大体有一下几点:

  1. 创建各种文件,并分配DAC权限
  2. 启动服务
  3. 监听属性

相关内容

  • 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部分组成

  1. Action(行为)
  2. Commands(命令)
  3. Services(服务)
  4. Options(选项)
  5. Imports(导入)

此外,还有两点概念。

  • Comments(注释):以#开头的行,表示注释。
# linduo test(我是一条注释)
mkdir /data/linduo 0777 root root
  • Section(段落/分组):
    Action(行为)和Services(服务)可以声明一个新的Section。
    Command和Option属于最近的分组。
    不属于分组的Command和Option将被忽略。
    Service名字唯一,第二个同名的Service将被忽略并提示错误信息(所有RC文件)。

在这里插入图片描述

Action
  1. 行为是一系列命令的开始,或者说行为是一系列Command的集合。
  2. 每个行为拥有一个Trigger,Trigger用来决定Action什么时候被执行。
  3. 当Trigger被触发,相应的Action会被添加到任务队列中(队尾插入),如果已再队列中则忽略。
  4. 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分为:

  1. 属性触发器: 属性变为属性值指定的属性值时触发。
  2. 事件触发器:通过QueueEventTrigger函数(c++),或 trigger command触发。
on xxx:
  trigger sss

Trigger,可以由多个属性触发器 + 一个事件触发器组成(有且仅有一个事件触发器)

import

引入其他rc文件。(类似于 java的import 、c++的include)

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值