转自:http://blog.csdn.net/yimiyangguang1314/article/details/6268177

init.rc由许多的Action和Service组成。每一个语句占据一行,并且各个关键字被空格分开.

由 # (前面允许有空格)开始的行都是注释行(comment)

一个actions 或 services 的开始隐含声明了一个新的段,所有commands 或 options 属于最近的声明。在第一个段之前的 commands 或 options 都会被忽略

每一个actions 和 services 都有不同的名字。后面与前面发生重名的,那么这个后面重名的将被忽略或被认为是一个错误。

actions其实就是一组被命名的命令序列。actions 都有一个触发条件,触发条件决定了action何时执行。当一个事件发生如果匹配action的触发条件,那么这个action将会被添加到预备执行队列的尾部(除非它已经在队列当中)

每一个action中的命令将被顺序执行。init进程负责在其它activities(如:设备创建/销毁,属性设置,进程重启)之间执行这些命令序列。

每一个action格式如下:

on <trigger>

<command>

<command>

...

trigger是一个action触发的条件,一共有如下几种:

1、boot

发生在init启动时,/init.conf被加载以后。

2、<name>=<value>

发生在名字为<name>的属性的值被设置为<value>时。

3、device-added-<path>/device-removed-<path>

当一个device node被添加/删除时。

4、service-exited-<name>当某个服务退出时。

command一共有如下几种:

1、exec <path> [<argument>]*

fork并execute一个路径<path>下面的程序,直到程序执行完毕后,init才会继续前进。尽量避免使用这个command,它有可能导致init阻塞。其它command不存在这个问题。

2、export <name> <value>

把全局环境变量<name>的值设置为<value>。这个命令执行完毕以后启动的所有进程都会继承这个全局变量。

3、ifup <interface>

Bring the network interface <interface> online.(打开某个网卡)

4、import <filename>

Parse an init config file, extending the current configuration.

5、hostname <name>

Set the host name.

6、class_start <serviceclass>

如果某一类service没有运行,启动它们。

7、class_stop <serviceclass>

如果某一类service正在运行,停止它们。

8、domainname <name>

Set the domain name.

9、insmod <path>

安装路径<path>指定的模块。

10、mkdir <path>

创建<path>代表的文件夹,只能一层层地创建。

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

把<device>挂载到系统类型为<type>的文件系统的<dir>目录下。<device>可能有mtd@name的形式,代表名字为name的mtd块设备。

12、setkey

未定义

13、setprop <name> <value>

设置系统属性。

14、setrlimit <resource> <cur> <max>

Set the rlimit for a resource.

15、start <service>

如果服务没有运行,启动它。

16、stop <service>

如果服务正在运行,停止它。

17、symlink <target> <path>

把<target>链接到目录<path>下。

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

打开<path>所指的文件,并把<string>写入。

关于3、5、8,参见init.rc里面的

on boot

# basic network init

ifup lo

hostname localhost

domainname localdomain

关于14,参见init.rc里面的

# set RLIMIT_NICE to allow priorities from 19 to -20

setrlimit 13 40 40

说完了action下来我们来说说service

services 是一些由init 启动 和 重新(如果有需要)启动的程序,当然这些程序如果是存在的。

每一个service格式如下:

service <name> <pathname> [ <argument> ]*

<option>

<option>

...

例如:

1

service ppp /system/bin/pppd call gprs
     user root
     group system radio
     disabled
     oneshot

2

service mtpd /system/bin/mtpd
    socket mtpd stream 600 system system
    user vpn
    group vpn net_admin net_raw
    disabled
    oneshot

options 是service的修饰符,用来告诉init 怎样及何时启动service。一共有如下几种:

1、disableds

这个服务不能通过启动一类服务来启动,只能单独以名字来启动。

2、socket <type> <name> <perm>  <user> <group>

创建一个名字为/dev/socket/<name>的unix domain socket,并把它的fd传递给 加载的进程。<type>的值是dgram或stream.

注意:在init.rc中使用socket时,<type>是放在<name>之后的。

init程序在运行过程中可能会设置几个特殊属性的值,来告诉其它程序它正在做什么。这些属性是:

(1)、init.action

当前正在执行的action的名字,如果没有,就是“”。

(2)、init.command

当前正在执行的command的名字,如果没有,就是“”。

(3)、init.svc.<name>

一个服务的状态。可能的值有:“stopped”,"running","restarting"

3、user <username>

在启动服务之前,把用户名切换到<username>。默认是root

4、group <groupname> [ <groupname> ]*

在启动服务之前,把组名切换到<groupname>。一个服务可能属于多个组。

5、capability [ <capability> ]+

Set linux capability before exec'ing this service

6、oneshot

服务之运行一次,退出后不再重启。

7、class <name>

为服务设定一个类别,一个类别是中的服务可以同时启动或停止。如果没有这个属性,服务的默认类别是“default”

默认情况下,通过init启动的程序都会把stdout和stderr定向到/dev/null。有时为了调试方便,可以通过Android的logwrapper程序启动某个程序。这样,被启动程序stdout和stderr就被定向到了Android的LOG系统中,可以通过logcat来查看了。

例如:

service akmd /system/bin/logwraper /sbin/akmd

转载:CSDN  网友 http://blog.csdn.net/a345017062/archive/2011/03/11/6239204.aspx,这篇博客,自己进行了部分修改,对于Android的软件研发人员,很有必要研究一下。

Android 的 init.rc 文件简介【转】的更多相关文章

  1. Android中的 init.rc文件简介

    init.rc脚本是由Android中linux的第一个用户级进程init进行解析的. init.rc 文件并不是普通的配置文件,而是由一种被称为"Android初始化语言"(An ...

  2. android中init.rc文件的解析问题

    init.rc中文件里会通过import /init.${ro.hardware}.rc文件,这个ro.hardware应该是某个详细的属性.而这个ro.hardware赋值应该是在Init进程中赋值 ...

  3. Android修改init.rc和init.xx.rc文件【转】

    本文转载自:https://blog.csdn.net/u013686019/article/details/47981249 一.文件简介 init.rc:Android在启动过程中读取的启动脚本文 ...

  4. Android init.rc文件浅析

    Android init.rc文件浅析 分类: Android2012-04-13 18:00 13149人阅读 评论(2) 收藏 举报 androidservicepathactionsocketc ...

  5. Android源码分析(十七)----init.rc文件添加脚本代码

    一:init.rc文件修改 开机后运行一次: chmod 777 /system/bin/bt_config.sh service bt_config /system/bin/bt_config.sh ...

  6. init.rc文件中面启动c++程序,通过jni调用java实现

    </pre><p>注:假设是自己的myself.jar包,还要修改例如以下:</p><p>target/product/core_base.mk PRO ...

  7. Android使用init.rc触发脚本实现隐藏内置应用

    [实现逻辑] 通过在property_service.c中设置标志位,在设置中实现接口改变标志位, 使用init.rc中声明的服务来侦听标志位的变化,显式启动声明的服务,执行对应的脚本,把应用后缀从a ...

  8. Android 重定向 init.rc中服务的输出

    在init.rc中运行的服务,由于系统启动的时候将标准输出重定向到了/dev/null, 所以服务中的打印信息都不可见. 但调试时可能需要看到其中的打印信息,因此就有了logwrapper这个工具:l ...

  9. Android: 启动init.rc 中service的权限问题【转】

    转自:http://www.linuxidc.com/Linux/2011-04/35014.htm 通过property_set("ctl.start", service_xx) ...

随机推荐

  1. 使用try-with-resources注意的问题

    package coin; import java.io.FileInputStream; import java.io.ObjectInputStream; /** * 使用 try-with-re ...

  2. HDU 5795 博弈

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5795 A Simple Nim Time Limit: 2000/1000 MS (Java/Oth ...

  3. 01.FastDFS的安装部署

    1.FastDFS简介 (1)FastDFS的功能介绍 FastDFS是一个开源的分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负 ...

  4. 【CentOs】搭建svn服务器

    参考资料: svn攻略: http://blog.csdn.net/colinchan/article/details/1865154 错误解决:http://hi.baidu.com/anglem/ ...

  5. BZOJ 1001: [BeiJing2006]狼抓兔子 最小割

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓 ...

  6. 【POJ】【3680】Intervals

    网络流/费用流 引用下题解: lyd: 首先把区间端点离散化,设原来的数值i离散化后的标号是c[i].这样离散化之后,整个数轴被分成了一段段小区间. 1.建立S和T,从S到离散化后的第一个点连容量K, ...

  7. Java 函数参数传递方式详解 分类: Java Game 2014-08-15 06:34 82人阅读 评论(0) 收藏

    转:http://zzproc.iteye.com/blog/1328591 在阅读本文之前,根据自己的经验和理解,大家可以先思考并选择一下Java函数的参数传递方式:  A. 是按值传递的?  B. ...

  8. 了解javascript中的事件(一)

    本人目录如下: 零.寒暄 一.事件概念 二.事件流 三.事件处理程序 四.总结 零.寒暄 由于刚入职,近期事情繁多,今天好不容易中期答辩完事,晚上有一些时间,来给大家分享一篇博文. 这段时间每天写js ...

  9. Beginners Guide To Learn Dimension Reduction Techniques

    Beginners Guide To Learn Dimension Reduction Techniques Introduction Brevity is the soul of wit This ...

  10. Sqlite中使用rowid来表示行号,用于分页。

    在SQLite的查询结果中显示行号,可以使用select rowid as RowNumber ,* from WSCLanguage: select rowid as RowNumber ,* fr ...