转自:http://www.cnblogs.com/nokiaguy/p/3164799.html

init.rc由如下4部分组成。

  1. 动作(Actions)

  2. 命令(Commands)

3. 服务(Services)

  1. 选项(Options)

    这4部分都是面向行的代码,也就是说用回车换行符作为每一条语句的分隔符。而每一行的代码由多个符号(Tokens)表示。可以使用反斜杠转义符在 Token中插入空格。双引号可以将多个由空格分隔的Tokens合成一个Tokens。如果一行写不下,可以在行尾加上反斜杠,来连接下一行。也就是 说,可以用反斜杠将多行代码连接成一行代码。

    AIL的注释与很多Shell脚本一行,以#开头。

    AIL在编写时需要分成多个部分(Section),而每一部分的开头需要指定Actions或Services。也就是说,每一个Actions或 Services确定一个Section。而所有的Commands和Options只能属于最近定义的Section。如果Commands和 Options在第一个Section之前被定义,它们将被忽略。

Actions和Services的名称必须唯一。如果有两个或多个Action或Service拥有同样的名称,那么init在执行它们时将抛出错误,并忽略这些Action和Service。

下面来看看Actions、Services、Commands和Options分别应如何设置。

Actions的语法格式如下:

on







也就是说Actions是以关键字on开头的,然后跟一个触发器,接下来是若干命令。例如,下面就是一个标准的Action。

on boot
ifup lo
hostname localhost
domainname localdomain

其中boot是触发器,下面三行是command

那么init.rc到底支持哪些触发器呢?目前init.rc支持如下5类触发器。

  1. boot

这是init执行后第一个被触发Trigger,也就是在 /init.rc被装载之后执行该Trigger

  1. =

当属性被设置成时被触发。例如,

on property:vold.decrypt=trigger_reset_main

class_reset main
  1. device-added-

    当设备节点被添加时触发

  2. device-removed-

当设备节点被移除时添加

  1. service-exited-

    会在一个特定的服务退出时触发

Actions后需要跟若干个命令,这些命令如下:

  1. exec [ ]*

创建和执行一个程序()。在程序完全执行前,init将会阻塞。由于它不是内置命令,应尽量避免使用exec ,它可能会引起init执行超时。

2.  export <name> <value>

在全局环境中将 变量的值设为。(这将会被所有在这命令之后运行的进程所继承)

  1. ifup

启动网络接口

  1. import

指定要解析的其他配置文件。常被用于当前配置文件的扩展

  1. hostname

设置主机名

  1. chdir

改变工作目录

  1. chmod

改变文件的访问权限

  1. chown

更改文件的所有者和组

  1. chroot

改变处理根目录

  1. class_start

启动所有指定服务类下的未运行服务。

11 class_stop

停止指定服务类下的所有已运行的服务。

  1. domainname

设置域名

  1. insmod

加载指定的驱动模块

  1. mkdir [mode][owner] [group]

创建一个目录 ,可以选择性地指定mode、owner以及group。如果没有指定,默认的权限为755,并属于root用户和 root组。

  1. mount [ ]*

试图在目录

挂载指定的设备。 可以是mtd@name的形式指定一个mtd块设备。包括 "ro"、"rw"、"re

  1. setkey

保留,暂时未用

  1. setprop

将系统属性的值设为。

  1. setrlimit

设置的rlimit (资源限制)

  1. start

启动指定服务(如果此服务还未运行)。

20.stop

停止指定服务(如果此服务在运行中)。

  1. symlink

创建一个指向的软连接。

  1. sysclktz <mins_west_of_gmt>

设置系统时钟基准(0代表时钟滴答以格林威治平均时(GMT)为准)

  1. trigger

触发一个事件。用于Action排队

  1. wait [ ]

等待一个文件是否存在,当文件存在时立即返回,或到指定的超时时间后返回,如果不指定,默认超时时间是5秒。

  1. write [ ]*

向指定的文件写入一个或多个字符串。

Services (服务)是一个程序,他在初始化时启动,并在退出时重启(可选)。Services (服务)的形式如下:

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

例如,下面是一个标准的Service用法

复制代码

service servicemanager /system/bin/servicemanager

class core

user system

group system

critical

onrestart restart zygote

onrestart restart media

onrestart restart surfaceflinger

onrestart restart drm

复制代码

Services的选项是服务的修饰符,可以影响服务如何以及怎样运行。服务支持的选项如下:

  1. critical

表明这是一个非常重要的服务。如果该服务4分钟内退出大于4次,系统将会重启并进入 Recovery (恢复)模式。

  1. disabled

表明这个服务不会同与他同trigger (触发器)下的服务自动启动。该服务必须被明确的按名启动。

  1. setenv

在进程启动时将环境变量设置为。

  1. socket [ [ ] ]

Create a unix domain socketnamed /dev/socket/ and pass

its fd to the launchedprocess. must be"dgram", "stream" or "seqpacket".

User and group default to0.

创建一个unix域的名为/dev/socket/ 的套接字,并传递它的文件描述符给已启动的进程。 必须是 "dgram","stream" 或"seqpacket"。用户和组默认是0。

  1. user

在启动这个服务前改变该服务的用户名。此时默认为 root。

  1. group [ ]*

在启动这个服务前改变该服务的组名。除了(必需的)第一个组名,附加的组名通常被用于设置进程的补充组(通过setgroups函数),档案默认是root。

  1. oneshot

服务退出时不重启。

  1. class

指定一个服务类。所有同一类的服务可以同时启动和停止。如果不通过class选项指定一个类,则默认为"default"类服务。

  1. onrestart

    当服务重启,执行一个命令

android init.rc语法的更多相关文章

  1. Android init.rc解析【转】

    转自:http://www.linuxidc.com/Linux/2014-10/108438.htm 本文主要来自$Android_SOURCE/system/init/readme.txt的翻译. ...

  2. Android init.rc文件浅析

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

  3. Android init.rc文件格式解析

    /***************************************************************************** * Android init.rc文件格式 ...

  4. init进程 && 解析Android启动脚本init.rc && 修改它使不启动android && init.rc中启动一个sh文件

    Android启动后,系统执行的第一个进程是一个名称为init 的可执行程序.提供了以下的功能:设备管理.解析启动脚本.执行基本的功能.启动各种服务.代码的路径:system/core/init,编译 ...

  5. android init.rc 语法分析

    此文来自于对http://source.android.com/porting/index.html中bring up段的简译.其中有一处与源码的 system/core/init/readme.tx ...

  6. android init.rc命令快速对照表

    注1:另外还讲述了怎样输出log: Debugging notes---------------By default, programs executed by init will drop stdo ...

  7. MTK(android init.rc) 写一个开机启动的服务

    在开机往往我们想要做一些初始化的操作,这时候可以使用init.rc文件来实现,当然书写一个开机启动的服务也需要规范的. 假设是C程序,则需要准备C程序的源码,在我的例程中是一个在开机完成(androi ...

  8. Android init.rc执行顺序

    转自:http://blog.csdn.net/kickxxx/article/details/7590665 1. 所有的action运行于service之前 2.  下面为各个section的执行 ...

  9. init.rc语法介绍

    1.init.rc是一个可配置的初始化文件,通常定制厂商可以配置额外的初始化配置,init.%PRODUCT%.rc 2.init.rc是在$GINGERBREAD/system/core/init/ ...

随机推荐

  1. js map对象处理if

    onButtonClick只有一个参数时候,map和object对象都可以 // onButtonClick1(3) onButtonClick只有一个参数时候,map和object对象都可以 con ...

  2. 想要使用GPU进行加速?那你必须事先了解CUDA和cuDNN

    这一期我们来介绍如何在Windows上安装CUDA,使得对图像数据处理的速度大大加快,在正式的下载与安装之前,首先一起学习一下预导知识,让大家知道为什么使用GPU可以加速对图像的处理和计算,以及自己的 ...

  3. agumaster 出现实际股票数据

    工程下载:https://files.cnblogs.com/files/xiandedanteng/agumaster20200430-3.zip --2020-04-30--

  4. 通过股票K线图来谈谈真正的技术和现实的技术

    开局一张图 这是一张股票日线图,上面记载这近期每个交易日该股的开盘价,收盘价,最高价,最低价. 有兴趣的人可以估算下数据量和表的设计,似乎有点工作量.可这还只是一部分,你还可以获得每日分时数据,成交量 ...

  5. Kubernetes 服务部署最佳实践(二) ——如何提高服务可用性

    引言 上一篇文章我们围绕如何合理利用资源的主题做了一些最佳实践的分享,这一次我们就如何提高服务可用性的主题来展开探讨. 怎样提高我们部署服务的可用性呢?K8S 设计本身就考虑到了各种故障的可能性,并提 ...

  6. numpy函数笔记(持续更新)

    numpy函数笔记 np.isin用法 np.isin(a,b) 用于判定a中的元素在b中是否出现过,如果出现过返回True,否则返回False,最终结果为一个形状和a一模一样的数组.(注意:这里的a ...

  7. 5 分钟带你掌握 Makefile 分析

    摘要:Makefile是一个名为GNU-Make软件所需要的脚本文件,该脚本文件可以指导Make软件控制arm-gcc等工具链去编译工程文件最终得到可执行文件,几乎所有的Linux发行版都内置了GNU ...

  8. liunx配置本地yum源和更新aliyun yum源

    1.挂载DVD光盘到/mnt   因为配置时候路径名里面不能有空格,否则不能识别 [root@ mnt]# mount   /dev/cdrom   /mnt [root@ mnt]# umount ...

  9. linux定时删除过期文件

    需求说明 每日凌晨0点定时删除/temp目录下的所有一个月未被访问的文件. 脚本实现 linux 终端输入crontab -e,添加定时任务脚本命令 [root@localhost ~]# cront ...

  10. 用ajax获取后端数据,显示在前端,实现了基本计算器功能

    下午在看视频的时候,遇到一个问题:如何把后端 print_r或echo的数据显示在前端.百度了一下,说是用ajax,想着前一阵子学习了ajax,并且最近也想做一个计算器,于是就自己钻起来了. 计算器的 ...