Android设备的启动必须经历三个阶段:Bootloader、Linux Kernel和Android系统服务。严格来说,Android系统实际是运行于Linux内核之上的一系列“服务进程”,而这些服务进程的“老祖宗”就是init,它是Android中第一个被启动的进程,因此PID号为0,它通过解析init.rc(就是一个脚本文件,很简单,但也很重要!!!)来构建出系统的初始运行形态:即其他Android系统服务程序大多是在这个rc脚本中描述并被按着一定的条件启动
二、rc文件的解析1.Google对于init.rc文件的唯一注解在AOSP下的/system/core/init/Readme.txt
如果想了解,请跳转
2.除了这个txt文件,与init.rc解析相关的代码在init_parser.c中
三、rc文件结构3.1.init.rc脚本由4种类型的声明构成:
Actions(行为)
Commands(命令)
Services( 服务)
Options(选项)
3.2.通用语法规则
“#”号注释
关键字和参数以空格分隔,每个语句以行为单位
C语言风格的放斜杠转义符('')可以用来为参数添加空格
字符串中如果有使用到空格,需要对空格加双引号,like this" "
行尾有反斜杠'',和C语言一样,表示下一行和这行是同一个
Actions和Services暗示着一个新语句的开始,这两个关键字后面跟着的Commands或者Options都属于这个新语句
Actions和Services有唯一的名字,如果出现和已有Actions或者Services重名的,将会被当作错误忽略掉
四、rc文件语法介绍4.1.Actions(动作)
1)动作的基本格式(可以执行多个命令)
on##出发条件 ##命令1 ##命令2 ##命令3 ...
2)解释一下
一个Action就是响应某个事件的过程,即当
从源码实现上看,当事件发生后,系统会对init.rc中各
3)有哪些
on boot #系统启动触发 on early-init #在初始化之前触发 on init #在初始化时触发(在启动配置文件/init.conf被装载之后) on late-init #在初始化晚期阶段触发 on charger #当充电时触发 on property:= #当属性值满足条件时触发 on post-fs #挂载文件系统 on post-fs-data #挂载data on device-added- #在指定设备被添加时触发 on device-removed- #在指定设备被移除时触发 on service-exited- #在指定service退出时触发 on = #当属性 等于 时触发
4.2.Commands(命令)
1)命令将在所属事件发生(也就是
2)常见的Command请看下面
4.3.Services(服务)
1)基本格式:
service[ ]* ... 此service的名字 此service的路径,因为是可执行文件,所以一定有存储路径 启动service所带的参数
2)解释一下:
service是可执行程序,它们在特定选项的约束下会被init程序运行或者重启(service可以在配置中指定是否需要退出时重启,这样当service出现异常或者程序crash时候就有机会复原)
4.4.Options(选项)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)