android的init.rc文件的语法
android的启动脚本(init.rc)文件的语法,参考资料:
http://www.kandroid.org/android_pdk/bring_up.html
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)
动作(Actions)是一个有名字的指令(commands)序列。每个动作(Actions)都定义一个触发条件(trigger),用于指示什么时候执行这个动作。当与动作的触发器匹配的事件发生时,该动作将被添加到一个即将被执行的队列的队尾(除非它已经在队列中)。
队列中的每一个动作被依次取出执行,动作中的每一个指令也将依次执行。初始化程序(Init)在执行一个动作的各项指令的期间,还需要处理其它操作(比如,设备创建/销毁,属性设置,进程重启)。
一个动作定义的形式如下:
on <trigger>
<command>
<command>
<command>
服务(Services)
服务是初始化程序需要启动的一些程序,初始化程序还有可能会在这些程序退出之后重启它们。Services take 一个服务定义的形式如下:
service <name> <pathname> [ <argument> ]*
<option>
<option>
...
选项(Options)
选项将影响控制初始化程序运行服务的时机和方法。可能的选项如下表。
选项 | 说明 |
| This service will not automatically start with its class. It must be explicitly started by name. |
| Create a unix domain socket named |
| Change to username before exec'ing this service. Currently defaults to root. |
| 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 |
| Set linux capability before exec'ing this service |
| Do not restart the service when it exits. |
| 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)的执行。
| |
触发器 | 说明 |
| This is the first trigger that occurs when init starts (after |
| Triggers of this form occur when the property |
| Triggers of these forms occur when a device node is added or removed. |
| Triggers of this form occur when the specified service exits. |
指令(Commands)
Command | Description |
| Fork and execute a program ( |
| Set the environment variable |
| Bring the network interface |
| Parse an init config file, extending the current configuration. |
| Set the host name. |
| Start all services of the specified class if they are not already running. |
| Stop all services of the specified class if they are currently running. |
| Set the domain name. |
| Install the module at |
| Make a directory at |
| Attempt to mount the named device at the directory |
| - currenlty undefined - |
| Set system property |
| Set the rlimit for a resource. |
| Start a service running if it is not already running. |
| Stop a service from running if it is currently running. |
| Create a symbolic link at |
| Open the file at |
属性(Properties)
初始化程序(Init)可以根据需要修改一些系统的属性。
属性 | 说明 |
| Equal to the name of the action currently being executed or "" if none. |
| Equal to the command being executed or "" if none. |
| 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