class="article_content clearfix">
class="htmledit_views">
Android初始化class="tags" href="/tags/JiaoBen.html" title=脚本>脚本语言包含四种类型的语句:
- 动作(Actions)
- 指令(Commands)
- 服务(Services)
- 选项(Options)
该语言的语法包括下列约定:
- 所有类型的语句都是基于行(line-oriented)的, 一个语句包含若干个tokens,token之间通过空格字符分隔. 如果一个token中需要包含空格字符,则需要通过C语言风格的反斜线('/')来转义,或者使用双引号把整个token引起来。反斜线还可以出现在一行 的末尾,表示下一行的内容仍然属于当前语句。
- 以'#'开始的行是注释行。
- 动作(Actions)和服务(Services)语句隐含表示一个新的段落(section)的开始。 所有的指令(class="tags" href="/tags/COMMAND.html" title=command>commands)和选项(options)归属于上方最近的一个段落。在第一个段落之前的指令(class="tags" href="/tags/COMMAND.html" title=command>commands)和选项 (options)是无效的。
- 动作(Actions)和服务(Services)拥有唯一性的名字。如果出现重名,那么后出现的定义将被作为错误忽略掉。
动作(Actions)是一个有名字的指令(class="tags" href="/tags/COMMAND.html" title=command>commands)序列。每个动作(Actions)都定义一个触发条件(trigger),用于指示 什么时候执行这个动作。当与动作的触发器匹配的事件发生时,该动作将被添加到一个即将被执行的队列的队尾(除非它已经在队列中)。队列中的 每一个动作被依次取出执行,动作中的每一个指令也将依次执行。初始化程序(Init)在执行一个动作的各项指令的期间,还需要处理其它操作(比如,设备创 建/销毁,属性设置,进程重启)。
一个动作定义的形式如下:
on <trigger>
<class="tags" href="/tags/COMMAND.html" title=command>command>
<class="tags" href="/tags/COMMAND.html" title=command>command>
<class="tags" href="/tags/COMMAND.html" title=command>command>
服务 ( Services )
服务是初始化程序需要启动的一些程序,初始化程序还有可能会在这些程序退出之后重启它们。Services take 一个服务定义的形式如下:class="tags" href="/tags/SERVICE.html" title=service>service <name> <pathname> [ <argument> ]*
<option>
<option>
...
选项(Options )
选项将影响控制初始化程序运行服务的时机和方法。可能的选项如下表。
选项 | 说明 |
disabled | This class="tags" href="/tags/SERVICE.html" title=service>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 class="tags" href="/tags/SERVICE.html" title=service>service. Currently defaults to root. |
group <groupname> [ <groupname> ]* | Change to groupname before exec'ing this class="tags" href="/tags/SERVICE.html" title=service>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 class="tags" href="/tags/SERVICE.html" title=service>service |
oneshot | Do not restart the class="tags" href="/tags/SERVICE.html" title=service>service when it exits. |
class <name> | Specify a class name for the class="tags" href="/tags/SERVICE.html" title=service>service. All class="tags" href="/tags/SERVICE.html" title=service>services in a named class must start and stop together. A class="tags" href="/tags/SERVICE.html" title=service>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. |
class="tags" href="/tags/SERVICE.html" title=service>service-exited-<name> | Triggers of this form occur when the specified class="tags" href="/tags/SERVICE.html" title=service>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 class="tags" href="/tags/COMMAND.html" title=command>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 class="tags" href="/tags/COMMAND.html" title=command>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 <class="tags" href="/tags/SERVICE.html" title=service>serviceclass> | Start all class="tags" href="/tags/SERVICE.html" title=service>services of the specified class if they are not already running. |
class_stop <class="tags" href="/tags/SERVICE.html" title=service>serviceclass> | Stop all class="tags" href="/tags/SERVICE.html" title=service>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 <class="tags" href="/tags/SERVICE.html" title=service>service> | Start a class="tags" href="/tags/SERVICE.html" title=service>service running if it is not already running. |
stop <class="tags" href="/tags/SERVICE.html" title=service>service> | Stop a class="tags" href="/tags/SERVICE.html" title=service>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.class="tags" href="/tags/COMMAND.html" title=command>command | Equal to the class="tags" href="/tags/COMMAND.html" title=command>command being executed or "" if none. |
init.svc.<name> | State of a named class="tags" href="/tags/SERVICE.html" title=service>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
class="tags" href="/tags/SERVICE.html" title=service>service adbd /sbin/adbd
user adb
group adb
class="tags" href="/tags/SERVICE.html" title=service>service usbd /system/bin/usbd -r
user usbd
group usbd
socket usbd 666
class="tags" href="/tags/SERVICE.html" title=service>service zygote /system/bin/app_process -Xzygote /system/bin --zygote
socket zygote 666
class="tags" href="/tags/SERVICE.html" title=service>service runtime /system/bin/runtime
user system
group system
on device-added-/dev/compass
start akmd
on device-removed-/dev/compass
stop akmd
class="tags" href="/tags/SERVICE.html" title=service>service akmd /sbin/akmd
disabled
user akmd
group akmd
http://blogold.chinaunix.net/u3/103613/showart_2237012.html