Android Init Language

来源:互联网 发布:暴雨网络天书九卷官网 编辑:程序博客网 时间:2024/05/19 06:46

Android Init Language 包含五种语句,分别是 Actions、Commands、Services、Options 以及 Imports.

  • Actions 和 Services 隐式地声明了一个新的 section,所有的 Commands 和 Options 都属于最近声明的 section,在第一个 section 之前的 Commands 和 Options 会被忽略
  • Actions 和 Services 都有自己的名字,如果一个 Action 定义的名字已经存在,那么属于它的 Commands 会被加到之前定义的 Action 的 Commands 的后面。如果一个 Service 定义的名字已经存在,那么它会被忽略并且一条错误信息会被记录下来

Init language 主要用在以 .rc 为后缀的纯文本文件中,在系统的多个位置都有用到它们:

  • /init.rc 是主要的 .rc 文件,它是 init.cpp 在其运行的开始加载的,负责系统的初始化。它会引入 (imports) /init.${ro.hardware}.rc 文件
  • 通过 mount_all 命令,init.cpp 加载在 /{system,vendor,odm}/etc/init/ 目录下的所有文件。这些目录是为在文件系统挂载之后使用的所有 Actions 和 Services 设计的
  • 可以在 mount_all 命令中指定路径以使系统 import 特定路径下的 .rc 文件而不是默认的 .rc 文件,这是为了支持工厂模式和其他非一般 boot 模式。正常 boot 过程中应该使用下面这三个默认路径:
    • /system/etc/init/ 中是一些核心系统项,例如 SurfaceFlinger、MediaService、logcatd 等
    • /vendor/etc/init/ 中是 SoC vendor 项,例如核心 SoC 功能需要的 actions 和 daemons
    • /odm/etc/init/ 中是设备定制项,例如运动传感器或者其他外设功能所需要的 actions 和 daemons

一、Actions

Actions 是 commands 的命名序列,Actions 有一个 trigger,它用来决定这个 action 应该什么时候发生。当满足 action 的 trigger 的事件发生时,这个 action 会被加到执行队列的尾部,除非队列中已经有这个 action.

队列中的每个 action 会被按次序执行并且 action 中的 command 也会被按次序执行,Actions 的格式如下所示:

on <trigger> [&& <trigger>]*   <command>   <command>   <command>

例如:

# Used to disable USB when switching stateson property:sys.usb.config=none && property:sys.usb.configfs=0    stop adbd    write /sys/class/android_usb/android0/enable 0    write /sys/class/android_usb/android0/bDeviceClass 0    setprop sys.usb.state ${sys.usb.config}

二、Services

Services 是一些程序,init 会建立它们,或者当它们退出时选择性地重启它们。Services 的格式如下所示:

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

例如:

service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server    class main    socket zygote stream 660 root system    onrestart write /sys/android_power/request_state wake    onrestart write /sys/power/state on    onrestart restart audioserver    onrestart restart cameraserver    onrestart restart media    onrestart restart netd    writepid /dev/cpuset/foreground/tasks

三、Options

Options 是对 Services 的修饰,他们会影响 init 什么时候以及如何运行这些 services.

  • critical:如果一个 critical 的 service 在四分钟内退出超过四次,设备会重启进入 recovery 模式
  • disabled:这些 services 不会自动启动,它必须被通过名字显示地启动
  • setenv <name> <value>:在创建过程中对环境变量 name 设置 value
  • class <name>:为这个 service 指定一个 class name。所有相同 class name 的 services 会被一起启动或停止。如果没有指定,那么这个 service 的 class name 将默认为 “default”
  • onrestart:当 service 重启时,执行一个 command
  • writepid <file...>:当这个 service fork 时,将其孩子的 pid 写入文件当中
  • oneshot:当 service 退出时,不要重启
  • socket <name> <type> <perm> [ <user> [ <group> [ <seclabel> ] ] ]
    • 创建一个名为 /dev/socket/<name> 的 socket 并且将其传给创建的进程
    • <type> 必须为 “dgram”、”stream” 或者 “seqpacket”
    • <User><group> 默认为 0
    • <seclabel> 是这个 socket 的 SELinux 安全上下文,其默认为这个 service 的 SELinux 安全上下文

四、Commands

一些常用的 commands 如下所示:

  • bootchart_init:如果配置过则开启 bootcharting
  • chmod <octal-mode> <path>:改变文件访问权限
  • chown <owner> <group> <path>:改变文件 owner 和 group
  • class_start <serviceclass>:启动指定 class 的所有 services
  • class_stop <serviceclass>:停止并且关闭指定 class 的所有运行中的 services
  • class_reset <serviceclass>:停止指定 class 的所有运行中的 services,但是不关闭,之后可以通过 class_start 重新启动它们
  • exec [ <seclabel> [ <user> [ <group> ]* ] ] -- <command> [ <argument> ]*:fork 并且执行给定参数的 command,一个命令执行完之前其他的不会被执行。<seclabel> 可以为 - 表示默认

五、Imports

import 关键字不是一个 command,它更像是自己的一个部分并且其在包含它的 .rc 文件被解析完成后被处理,其格式为:

  • import <path>:解析一个 init 配置文件,扩展现在的配置,如果 <path> 是一个目录,目录中的每个文件都会被当作一个配置文件来解析,嵌套的目录不会被解析。

更多详情请查看 /system/core/init/readme.txt 文件

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老板跑了财务负责人怎么办 在南京加入嘀嘀代驾怎么办 苹果盗刷支付宝怎么办 街电支付宝掉了怎么办 转转上号器没有苹果版的怎么办 安卓6不支持的应用怎么办 银行卡被存款机吞了怎么办 去银行卡存款机器故障怎么办 银行卡存款没有存进去怎么办 被黑网站黑钱了怎么办 饿了吗账户异常怎么办 单位里有人整你怎么办 乌鲁木齐信息采集结束后怎么办 头发很长时间不长怎么办啊 打嘟噜时间不长怎么办 阴茎勃起的时间不长怎么办 睡觉的时间不长怎么办 每次锻炼时间不长怎么办 微信好友不知道是谁怎么办 就一个软件闪退怎么办 葫芦侠修改闪退怎么办 戴尔游匣磁盘占用100怎么办 步步高家教机扫描笔不亮怎么办 社保卡手机号换了怎么办 香港公司进出口没有申报怎么办 智能电视右上角网络未连接怎么办 电子秤按键板不好用怎么办失灵 桑塔纳车钥匙锁车里了怎么办 舌头上有锯齿印怎么办 夏天有脚气脚臭怎么办 xp分辨率太高黑屏怎么办 农村淘宝标识类目没了怎么办 被投诉到食品监督局怎么办 被客户315投诉了怎么办 给人打不接受调解怎么办 失业证年审忘了怎么办 工商年检过期4天怎么办 个体营业执照年审过期了怎么办 企业年报密码忘了怎么办 税务年报报错了怎么办 工商证过期5年怎么办