如何写Android init.rc(该文章翻译自/system/core/init/readme.txt)


group <groupname> [<groupname> ]*

     在执行服务前改变组。在第一个组后的组将设为进程附加组(通过setgroups()).当前默认为root.

 

oneshot

     在服务退出后不重启。

 

class <name>

     service指定一个类别名。同样类名的所有的服务可以一起启动或停止。如果没有指定类别的服务默认为"default"类。

 

onrestart

       当服务重启时执行一个命令。

 

Triggers

--------

     Triggers(触发器)是一个字符串,可以用来匹配某种类型的事件并执行一个action

 

boot

     这是当init开始后执行的第一个触发器(/init.conf被加载)

 

<name>=<value>

     property <name>被设为指定的值<value>时触发。

 

device-added-<path>

device-removed-<path>

     当设备节点被添加或移除时触发。

 

service-exited-<name>

     当指定的服务存在时触发

 

 

Commands

--------

 

exec <path> [ <argument>]*

     Fork并执行一个程序(<path>).这将被block直到程序执行完毕。最好避免执行例如内建命令以外的程序,它可能会导致init被阻塞不动。

 

export <name> <value>

     设定全局环境变量<name>的值<value>,当这个命令执行后所有的进程都可以取得。

 

ifup <interface>

     使网络接口<interface>联机。

 

import <filename>

     解析一个init配置文件,扩展当前配置文件。

 

hostname <name>

     设置主机名

 

chmod <octal-mode> <path>

     改变文件访问权限

 

chown <owner> <group><path>

     改变文件所属和组

 

class_start <serviceclass>

     当指定类别的服务没有运行,启动该类别所有的服务。

 

class_stop <serviceclass>

     当指定类别的服务正在运行,停止该类别所有的服务。

 

domainname <name>

     设置域名。

 

insmod <path>

     加载该路径<path>的模块

 

mkdir <path> [mode] [owner][group]

     <path>创建一个目录,可选选项:mod,owner,group.如果没有指定,目录以755权限,ownerroot,grouproot创建.

 

mount <type> <device><dir> [ <mountoption> ]*

     尝试mount <device>到目录<dir>. <device>可以用mtd@name格式以命名指定一个mtd块设备。<mountoption>包含"ro","rw","remount","noatime".

 

setkey

     暂时没有

 

setprop <name> <value>

     设置系统property <name>的值<value>.

 

setrlimit <resource> <cur><max>

     设置resourcerlimit.

 

start <service>

     启动一个没有运行的服务。

 

stop <service>

     停止一个正在运行的服务。

 

symlink <target> <path>

     创建一个<path>的符号链接到<target>

 

sysclktz <mins_west_of_gmt>

     设置系统时区(GMT0)

 

trigger <event>

     触发一个事件。用于调用其它action

 

write <path> <string> [<string> ]*

     打开<path>的文件并写入一个或多个字符串。

 

 

Properties

----------

Init会更新一些系统property以提供查看它正在干嘛。

init.action

     当前正在执行的action,如果没有则为""

 

init.command

     被执行的命令,如果没有则为""

 

init.svc.<name>

     命名为<name>的服务的状态("stopped","running", "restarting")

 

 

init.rc示例:

-----------------

 

# not complete -- just providing someexamples of usage

#

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

 

调试

---------------

默认情况下,init执行的程序输出的信息和错误到/dev/null.为了debug,你可以通过Android程序logwrapper执行你的程序。这将复位向输出/错误输出到Android logging系统(通过logcat访问)

例如

service akmd /system/bin/logwrapper/sbin/akmd


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值