Android初始化语言(Android Init Language)
Android初始化脚本语言包含四种类型的语句:
- 动作(Actions)
- 指令(Commands)
- 服务(Services)
- 选项(Options)
该语言的语法包括下列约定:
- 所有类型的语句都是基于行(line-oriented)的, 一个语句包含若干个tokens,token之间通过空格字符分隔. 如果一个token中需要包含空格字符,则需要通过C语言风格的反斜线('\')来转义,或者使用双引号把整个token引起来。反斜线还可以出现在一行的末尾,表示下一行的内容仍然属于当前语句。
- 以'#'开始的行是注释行。(前面允许有空格);
- 动作(Actions)和服务(Services)语句隐含表示一个新的段落(section)的开始。 所有的指令(commands)和选项(options)归属于上方最近的一个段落。在第一个段落之前的指令(commands)和选项(options)是无效的。
- 动作(Actions)和服务(Services)拥有唯一性的名字。如果出现重名,那么后出现的定义将被作为错误忽略掉。
动作(Actions)是一个有名字的指令(commands)序列。每个动作(Actions)都定义一个触发条件(trigger),用于指示什么时候执行这个动作。当与动作的触发器匹配的事件发生时,该动作将被添加到一个即将被执行的队列的队尾(除非它已经在队列中)。
队列中的每一个动作被依次取出执行,动作中的每一个指令也将依次执行。初始化程序(Init)在执行一个动作的各项指令的期间,还需要处理其它操作(比如,设备创建/销毁,属性设置,进程重启)。
一个动作定义的形式如下:
on <trigger>
<command>
<command>
<command>
服务(Services)
服务是初始化程序(init) 需要启动的一些程序,初始化程序还有可能会在这些程序退出之后重启它们。Services take 一个服务定义的形式如下:service <name> <pathname> [ <argument> ]* <option> <option> ...
选项(Options)
选项 将影响控制初始化程序运行服务的 时机 和 方法。可能的选项如下表。
| 选项 | 说明 |
disabled |
This service will not automatically start with its class. It must be explicitly started by name. |
socket <name> <type> <perm> [ <user> [ <group> ] ] |
Create a unix domain socket named /dev/socket/<name> and pass its fd to the launched process. Valid
<type> values include dgram and stream.
user and group default to 0. |
user <username> |
Change to username before exec'ing this service. Currently defaults to root. |
group <groupname> [ <groupname> ]* |
Change to groupname before exec'ing this service. Additional groupnames beyond the first, which is required, are used to set additional groups of the process (with
setgroups()). Currently defaults to root. |
capability [ <capability> ]+ |
Set linux capability before exec'ing this service |
oneshot |
Do not restart the service when it exits. |
class <name> |
Specify a class name for the service. All services in a named class must start and stop together. A service is considered of class "default" if one is not specified via the class option. |
触发器(Triggers)
触发器是一个字符串,用于匹配特定的事件,这些事件将触发 触发器 所属动作(Actions)的 执行。
| 触发器 | 说明 |
boot |
This is the first trigger that occurs 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> |
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)
| Command | Description |
exec <path> [ <argument> ]* |
Fork and execute a program (<path>). This will block until the program completes execution. Try to avoid exec. Unlike the
builtin commands, it runs the risk of getting init "stuck". |
export <name> <value> |
Set the environment variable <name> equal to
<value> in the global environment (which will be inherited by all processes started after this command is executed). |
ifup <interface> |
Bring the network interface <interface> online. |
import <filename> |
Parse an init config file, extending the current configuration. |
hostname <name> |
Set the host name. |
class_start <serviceclass> |
Start all services of the specified class if they are not already running. |
class_stop <serviceclass> |
Stop all services of the specified class if they are currently running. |
domainname <name> |
Set the domain name. |
insmod <path> |
Install the module at <path>. |
mkdir <path> |
Make a directory at <path>. |
mount <type> <device> <dir> [ <mountoption> ]* |
Attempt to mount the named device at the directory <dir> <device>. This may be of the form mtd@name to specify a mtd block device by name. |
setkey |
- currenlty undefined - |
setprop <name> <value> |
Set system property <name> to <value>. |
setrlimit <resource> <cur> <max> |
Set the rlimit for a resource. |
start <service> |
Start a service running if it is not already running. |
stop <service> |
Stop a service from running if it is currently running. |
symlink <target> <path> |
Create a symbolic link at <path> with the value <target>. |
write <path> <string> [ <string> ]* |
Open the file at <path> and write one or more strings to it with write(2). |
属性(Properties)
初始化程序(Init)可以根据需要修改一些系统的属性。| 属性 | 说明 |
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", or "restarting"). |
init.rc文件示例
on boot export PATH /sbin:/system/sbin:/system/bin export LD_LIBRARY_PATH /system/lib mkdir /dev mkdir /proc mkdir /sys mount tmpfs tmpfs /dev mkdir /dev/pts mkdir /dev/socket mount devpts devpts /dev/pts mount proc proc /proc mount sysfs sysfs /sys write /proc/cpu/alignment 4 ifup lo hostname localhost domainname localhost mount yaffs2 mtd@system /system mount yaffs2 mtd@userdata /data import /system/etc/init.conf class_start default service adbd /sbin/adbd user adb group adb service usbd /system/bin/usbd -r user usbd group usbd socket usbd 666 service zygote /system/bin/app_process -Xzygote /system/bin --zygote socket zygote 666 service runtime /system/bin/runtime user system group system on device-added-/dev/compass start akmd on device-removed-/dev/compass stop akmd service akmd /sbin/akmd disabled user akmd group akmd
浙公网安备 33010602011771号