分类: 嵌入式
2010-03-31 17:31:59
Android初始化脚本语言包含四种类型的语句:
该语言的语法包括下列约定:
动作(Actions)是一个有名字的指令(commands)序列。每个动作 (Actions)都定义一个触发条件(trigger),用于指示什么时候执行这个动作。当与动作的触发器匹配的事件发生时,该动作将被添加到一个即将 被执行的队列的队尾(除非它已经在队列中)。
队列中的每一个动作被依次取出执行,动作中的每一个指令也将依次执行。初始化程序
(Init)在执行一个动作的各项指令的期间,还需要处理其它操作(比如,设备创建/销毁,属性设置,进程重启)。
一个动作定义的形式如下:
on
服务(Services)
服务是初始化程序需要启动的一些程序,初始化程序还有可能会在这些程序退出之后重启它们。 Services take 一个服务定义的形式如下:service[ ]*
选项(Options)
选项将影响控制初始化程序运行服务的时机和方法。可能的选项如下表。
| 选项 | 说明 |
disabled |
This service will not automatically start with its class. It must be explicitly started by name. |
socket |
Create a unix domain socket named /dev/socket/
and pass its fd to the launched process. Valid
values include dgram and stream. user
and group default to 0. |
user |
Change to username before exec'ing this service. Currently defaults to root. |
group |
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 [ |
Set linux capability before exec'ing this service |
oneshot |
Do not restart the service when it exits. |
class |
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). |
|
Triggers of this form occur when the
property is set to the specific value . |
device-added- |
Triggers of these forms occur when a device node is added or removed. |
service-exited- |
Triggers of this form occur when the specified service exits. |
指令(Commands)
| Command | Description |
exec |
Fork and execute a program ().
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 |
Set the environment variable
equal to in the global environment (which
will be inherited by all processes started after this command is
executed). |
ifup |
Bring the network interface
online. |
import |
Parse an init config file, extending the current configuration. |
hostname |
Set the host name. |
class_start |
Start all services of the specified class if they are not already running. |
class_stop |
Stop all services of the specified class if they are currently running. |
domainname |
Set the domain name. |
insmod |
Install the module at . |
mkdir |
Make a directory at . |
mount |
Attempt to mount the named device at
the directory . This
may be of the form mtd@name to specify a mtd block device by name. |
setkey |
- currenlty undefined - |
setprop |
Set system property
to . |
setrlimit |
Set the rlimit for a resource. |
start |
Start a service running if it is not already running. |
stop |
Stop a service from running if it is currently running. |
symlink |
Create a symbolic link at
with the value . |
write |
Open the file at
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. |
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