栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

init.rc详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

init.rc详解

一、什么是init.rc?

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就是响应某个事件的过程,即当所描述的事件发生的时候,依次执行command1、command2...

从源码实现上看,当事件发生后,系统会对init.rc中各进行匹配,只要发现符合条件的Action,就会把它加入“命令执行队列”的尾部(如果已经存在了就不加了),然后系统再对这些命令按顺序执行。

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请看下面

exec[ ]*fork并执行一个程序,其路径为,这条命令将阻塞直到该程序启动完成,因此它有可能造成init程序在某个节点不停地等待
export设置某个环境变量的值为,这是对全局有效的,即其后所有进程都将继承这个变量
ifup使网络接口成功连接
import引入一个名为的文件
hostname设置主机名
chdir更改工作目录为
chmod更改文件访问权限
chown更改文件所有者和组群
chroot更改根目录位置
class_start如果它们不在运行状态的话,启动由类名指定的所有相关服务
class_stop如果它们在运行状态的话,停止
domainname设置域名
insmod路径上安装一个模块
mkdir[mode][owner][group]路径上新建一个目录
mount[]*尝试在指定路径上挂载一个设备
setkey目前未定义
setprop设置系统属性的值为
setrlinit设置一种资源的使用限制。这个概念亦存在于Linux系统中,表示软限制,表示硬限制
start启动一个服务
stop停止一个服务
symlink创建一个路径的软链接,目标为
sysclk设置基准时间,如果当前时间时GMT,这个值是0
trigger触发一个事件
write[]*打开一个文件,并写入字符串

4.3.Services(服务)

1)基本格式:

service  [  ]*
    
    
    ...

此service的名字
此service的路径,因为是可执行文件,所以一定有存储路径
启动service所带的参数

2)解释一下:

service是可执行程序,它们在特定选项的约束下会被init程序运行或者重启(service可以在配置中指定是否需要退出时重启,这样当service出现异常或者程序crash时候就有机会复原)

4.4.Options(选项)

critical表示这是一个对设备至关重要的一个服务,如果它在四分钟内退出超过四次,则设备将重启进入恢复模式
disabled此服务不会自动启动,而是需要通过显式调用服务名来启动
setenv设置环境变量为某个值
socket[ []]创建一个名为/dev/socket/的unix domain socket,然后将它的fd值传给启动它的进程,有效的值包括dgram,stream和seqacket,而user和group的默认值是0
user在启动服务前将用户组切换为,默认情况下用户都是root
group[]*在启动服务前将用户组切换为
oneshot只启动一次,当此服务退出时,不要主动去重启它
class为该服务指定一个class名,同一个class的所有服务必须同时启动或者停止。默认情况下服务的class名是“default”
onrestart当此服务重启时,执行某些命令

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/658702.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号