Android 初始化脚本语法解析
2011-12-21 15:59
316 查看
摘自:http://blog.chinaunix.net/space.php?uid=22415790&do=blog&id=1774114
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)在执行一个动作的各项指令的期间,还需要处理其它操作(比如,设备创建/销毁,属性设置,进程重启)。
一个动作定义的形式如下:
服务(Services)
服务是初始化程序需要启动的一些程序,初始化程序还有可能会在这些程序退出之后重启它们。Services take 一个服务定义的形式如下:
选项(Options)
选项将影响控制初始化程序运行服务的时机和方法。可能的选项如下表。
触发器(Triggers)
触发器是一个字符串,用于匹配特定的事件,这些事件将触发触发器所属动作(Actions)的执行。
指令(Commands)
属性(Properties)
初始化程序(Init)可以根据需要修改一些系统的属性。
init.rc文件示例
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)
选项将影响控制初始化程序运行服务的时机和方法。可能的选项如下表。
选项 | 说明 |
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 socketnamed /dev/socket/<name>and pass its fd to the launched process. Valid <type>values include dgramand stream. userand groupdefault 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 (withsetgroups()). 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. |
触发器是一个字符串,用于匹配特定的事件,这些事件将触发触发器所属动作(Actions)的执行。
触发器 | 说明 |
boot | This is the first trigger that occurs when init starts (after /init.confis 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. |
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 builtincommands, 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). |
初始化程序(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"). |
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/adbduser adb
group adb
service usbd /system/bin/usbd -ruser usbd
group usbd
socketusbd 666
service zygote /system/bin/app_process -Xzygote /system/bin --zygote
socketzygote 666
service runtime /system/bin/runtimeuser system
group system
on device-added-/dev/compass
start akmd
on device-removed-/dev/compass
stop akmd
service akmd /sbin/akmd
disableduser akmd
group akmd
相关文章推荐
- Android 初始化脚本语法解析
- Android 初始化脚本语法解析
- Android 初始化脚本语法解析
- Android 系统启动脚本init.rc语法解析
- android lichee编译脚本解析
- Android系统recovery刷机脚本updater-script语法说明
- Android的init过程(二):初始化语言(init.rc)解析
- Android 的init脚本编写解析
- Android的init过程(二):初始化语言(init.rc)解析
- Android的init过程(二):初始化语言(init.rc)解析
- android lichee编译脚本解析
- android init 进程分析 (3 初始化脚本)
- nsis安装包_示例脚本语法解析
- android教程学习第11讲:nit进程脚本如何解析启动脚本
- Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程
- android启动过程配置文件的解析与语法
- Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程
- android启动过程配置文件的解析与语法
- Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程
- android启动过程配置文件的解析与语法