Android Init语言

Android Init语言是一种特别简单的语言,专门用来写Android的Init进程使用的配置文件的。
相当于Linux系统中的rc文件(这句话对于Linux者多半是句废话)。

Android Init语言主要有四部分组成,分别是Actions, Commands, Services和Options。
语法的四个组成部分,都是面向行的,每行都对应一个操作,在行里的用空格(注:空格,\t, \r)
来区分不同的token。如果想要在token中插入一个空格,需要使用反斜线+空格的方式。另外双引号
也可以让一个token中出现的空格部位一般意义的空格,而不是一个分割符。 如果某一行过长的话,
可以在行尾使用 反斜线连接同一行的内容

用#可以注释掉一行。Action和Service都是块(SECTION), 所有的Command或者Option属于离它
最近的那个块。出现在第一个块之外的Command和Option都是无效的。注意下,Command组成了Action,
而Service的属性都是Option

Action和Service都有一个唯一的名字。如果出现第二个同名的Action或者Service,那么第二个
Action或者Service会被认为是一个错误

Action

Action实际上就是一组命令的名字而已。Action的名字之后跟着一个触发器。这个触发器才是决定
这一组命令在何时开始执行。假如系统中发生的事件,和当前Action的触发器相匹配的话,那么这个
Action中这组命令就会被添加到一个等到执行的列表的末尾。

每一个Action都是在执行队列中顺序执行的。Init进程在执行这个队列的之余还会处理一些其他事情,
比如设备的插入或者拔出,属性的设定或者某些进程的重启等。

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

Services

Service是一个可执行程序,这个可执行程序由init进程启动。当Service在退出时
根据选择可以重启这个Service

service <name> <pathname> [ <argument> ]*
<option>
<option>
...

Options

Option定义了Service在启动或者退出时一些属性或者操作. Option会影响Service在何时
,如何启动和运行一个Service

critical
如果一个critical Service在4分钟内退出了4次,那么设备就要重启进入Recovery模式

disabled
表示这个Service不会在同一类别service启动时自动启动。这样的service必须使用名字启动

setenv <name> <value>
设定这个service启动所在进程的环境变量

下面这几个属性,和selinux相关的规则设置。
socket <name> <type> <perm> [ <user> [ <group> ] ]
Create a unix domain socket named /dev/socket/<name> and pass
its fd to the launched process. <type> must be "dgram", "stream" or "seqpacket".
User and group default to 0.

user <username>
Change to username before exec‘ing this service.
Currently defaults to root. (??? probably should default to nobody)
Currently, if your process requires linux capabilities then you cannot use
this command. You must instead request the capabilities in-process while
still root, and then drop to your desired uid.

group <groupname> [ <groupname> ]*
Change to groupname before exec‘ing this service. Additional
groupnames beyond the (required) first one are used to set the
supplemental groups of the process (via setgroups()).
Currently defaults to root. (??? probably should default to nobody)

seclabel <securitycontext>
这个是和selinux的管理策略有关的。这个东西要细细地研究啊

oneshot
当service退出时,不会重新启动这个service

class <name>
为Service分类使用的,每个Service都属于某个类,init进程
可以一次启动和停止一个类别中的所有service。 如果Service中
没有这个class的话,默认的是“default”类

onrestart
当Service重启时会重启一些启动的依赖的Service

Triggers

触发器就是一个字符串,当某个字符串和触发器匹配成功时,那么这个

action下面的一系列命令就开始执行了。

boot
This is the first trigger that will occur when init starts
(after /init.conf is loaded)

<name>=<value>
Triggers of this form occur when the property <name> is set
to the specific value <value>.

device-added-<path>
device-removed-<path>
Triggers of these forms occur when a device node is added
or removed.

service-exited-<name>
Triggers of this form occur when the specified service exits.

Commands

这里面的命令大部分和Linux相同,比如copy,read, write, chdir等函数,

不过下面这些是Android特有的,在Linux基础上补充进去的

class_start <serviceclass>

如果某一类的服务还没有启动的话,启动serviceclass这一类别种所有的service。

class_stop <serviceclass>
如果某一类服务正在运行,那么停止serviceclass这一类别种所有的service。

setprop <name> <value>
设置系统属性的命令,属性就是一个键值对

setrlimit <resource> <cur> <max>

start <service>
如果某个服务还没有启动的话,那么就启动这个服务

stop <service>
如果某个服务正在运行的话,那么久停止这个服务的运行

trigger <event>

从一个Action中触发另外一个Action

Properties
Init updates some system properties to provide some insight into
what it‘s doing:

init.action
Equal to the name of the action currently being executed or "" if none

init.command
Equal to the command being executed or "" if none.

init.svc.<name>
State of a named service ("stopped", "running", "restarting")

时间: 2024-11-08 23:08:12

Android Init语言的相关文章

Android init language (安卓初始化语言)

目前在研究framework框架,AIL是Android初始化语言,以下是根据官方文档进行的翻译有助于研究Android启动过程: Android初始化语言包含了四种类型的声明:Actions(行动).Commands(命令).Services(服务)和Options(选项). 所有这些都是以行为单位的,各种记号由空格来隔开.C语言风格的反斜杠号可用于在记号间插入空格.双引号也可用于防止字符串被空格分割成多个记号.行末的反斜杠用于折行. 注释行以井号(#)开头(允许以空格开头). Actions

Android C语言_init函数和constructor属性及.init/.init_array节探索

本篇文章主要介绍了"Android C语言_init函数和constructor属性及.init/.init_array节探索",主要涉及到Android C语言_init函数和constructor属性及.init/.init_array节探索方面的内容,对于Android C语言_init函数和constructor属性及.init/.init_array节探索感兴趣的同学可以参考一下. 了解C语言的程序猿都知道有两种方法可以让一部分代码在so或可执行文件被加载的时候先于其它任何函

Android 初始化语言 --init.rc

p.p1 { margin: 0.0px 0.0px 12.9px 0.0px; line-height: 24.0px; font: 21.0px Helvetica; color: #000000; background-color: #ffffff } p.p2 { margin: 0.0px 0.0px 10.0px 0.0px; line-height: 16.0px; font: 14.0px "PingFang SC"; color: #000000; backgroun

【Android 多语言切换简单实例分享】

一.Android多语言切换 Android应用的开发不可能只针对某一个国家或者区域使用,各国间语言文化各不相同,因此一个优秀的APP必须支持多种语言,为了实现这个特性,Android给出了一个解决方式,在res目录下通过values+语言编码来实现多国语言的支持(中间采用连字符号-连接),例如:values-es代表英文,如果你决定了你的应用要支持多国语言,那么你就必须新建多种values-XXX的多语言支持文件,下面通过一个例子来看看基本的使用方式,先看下效果图: 1.工程结构 注:主要看下

android init进程分析 init脚本解析和处理

(懒人近期想起我还有csdn好久没打理了.这个android init躺在我的草稿箱中快5年了.略微改改发出来吧) RC文件格式 rc文件是linux中常见的启动载入阶段运行的文件.rc是run commands的缩写.基本上能够理解为在启动阶段运行的一些列命令.android init进程启动时,也会运行此启动脚本文件,init.rc.init.rc的写法稍有点复杂,具体可參考 /system/core/init下的readme文件.脚本基本组成是由四类,为: commands: 命令 act

Android init源代码分析(1)概要分析

功能概述 init进程是Android内核启动的第一个进程,其进程号(pid)为1,是Android系统所有进程的祖先,因此它肩负着系统启动的重要责任.Android的init源代码位于system/core/init/目录下,伴随Android系统多个版本的迭代,init源代码也几经重构. 目前Android4.4源代码中,init目录编译后生成如下Android系统的三个文件,分别是 /init /sbin/ueventd-->/init /sbin/watchdogd-->/init 其

Android init 语法解析

Android init脚本语言的规范 语法描述:system/core/init/readme.txt 关键字: token:  计算机语言中的一个单词,就跟英文中的单词差不多一人概念. Section: 语句块,相当于C语言中大括号内的一个块.一个Section以Service或On开头的语句块.以Service开头的Section叫做服务,而以On开头的叫做动作(Action). services: 服务. Action: 动作 commands:命令. options:选项. trigg

Android init.rc解析【转】

转自:http://www.linuxidc.com/Linux/2014-10/108438.htm 本文主要来自$Android_SOURCE/system/init/readme.txt的翻译. 1 简述 Android init.rc文件由系统第一个启动的init程序解析,此文件由语句组成,主要包含了四种类型的语句:Action,Commands,Services,Options.在init.rc文件中一条语句通常是占据一行.单词之间是通过空格符来相隔的.如果需要在单词内使用空格,那么得

Android init.rc文件浅析

本文主要来自$ANDROID_SOURCE/system/init/readme.txt的翻译. 1 简述 Android init.rc文件由系统第一个启动的init程序解析.此文件由语句组成,主要包括了四种类型的语句:Action,Commands,Services,Options.在init.rc文件里一条语句一般是占领一行.单词之间是通过空格符来相隔的.假设须要在单词内使用空格,那么得使用转义字符"\",假设在一行的末尾有一个反斜杠,那么是换行折叠符号,应该和下一行合并成一起来