android init.rc文件语法详解

2023-11-09


初始化语言包含了四种类型的声明:
Actions(行动)、 Commands(命令)、Services(服务)和Options(选项)。




基本语法规定
1 所有类型的语句都是基于行的,一个语句包含若干个tokens,token之间通过空格字符分隔. 如果一个token中需要包含空格字符,则需要通过C语言风格的反斜线('\')来转义,或者使用双引号把整个token引起来。反斜线还可以出现在一行的末尾,表示下一行的内容仍然属于当前语句。
2 以'#'开始的行是注释行。
3 动作(Actions)和服务(Services)语句隐含表示一个新的段落(section)的开始。 所有的命令(commands)和选项(options)归属于上方最近的一个段落。在第一个段落之前的指令(commands)和选项(options)是无效的。在服务之后的命令也是无效的。
4 import 语句导入其他的rc文件,例如import /init.usb.rc 导入跟目录下的init.usb.rc文件。






动作(Actions)就是在某种条件下触发一系列的命令,通常有一个trigger,形式如下:
on <trigger>
     <command>
     <command>
trigger主要包括:
boot    当/init.conf加载完毕时触发
<name>=<value>     当<name>被设置为<value>时触发,例如on  property:sys.sensors=1表示当环境变量sys.sensors被设置为1的时候触发。
此外还有early-init init early-boot等等。可以打乱顺序随便写的,但是解析完了以后的执行顺序确实固定的,执行顺序如下:early-init -> init -> early-boot -> boot






command 主要包括:
exec <path> [ <argument> ]    执行指定路径下的程序,并传递参数. 
export <name> <value>         设置全局环境参数,此参数被设置后对所有进程都有效. 
ifup <interface>      使指定的网络接口"上线",相当激活指定的网络接口 
hostname <name>               设置主机名 
chdir <directory>             改变工作目录. 
chmod <octal-mode> <path>     改变指定文件的读取权限. 
chown <owner> <group> <path>  改变指定文件的拥有都和组名的属性. 
chroot <directory>            改变进行的根目录. 
class_start <serviceclass>    启动指定类属的所有服务,如果服务已经启动,则不再重复启动. 
class_stop <serviceclass>     停止指定类属的所有服务. 
domainname <name>             设置域名 
insmod <path> [ <argument> ]  安装指定路径的模块,以及指定参数. 
mkdir <path> [mode] [owner] [group] 用指定参数创建一个目录,在默认情况下,创建的目录读取权限为755.用户名为root,组名为root. 
mount <type> <device> <dir> [ <mountoption> ]* 类似于linux的mount指令 
setprop <name> <value>       设置属性及对应的值. 
setrlimit <resource> <cur> <max> 设置资源的rlimit(资源限制),不懂就百度一下rlimit 
start <service>              如果指定的服务未启动,则启动它. 例如"start ueventd " ueventd 是服务名,
stop <service>               如果指定的服务当前正在运行,则停止它. 
symlink <target> <path>      创建一个符号链接. 
sysclktz <mins_west_of_gmt>  设置系统基准时间. 
trigger <event>              启动某个触发条件,例如trigger firmware_mounts_complete,那么on  firmware_mounts_complete段的动作将会执行
write <path> <string> [ <string> ] 往指定的文件写字符串. 






服务(Services)服务是指那些需要在系统初始化时就启动或退出时自动重启的在后台执行的程序.形式如下:
service <name> <pathname> [ <argument> ]
  <option>  
  <option>  
说明name可以随便定义一个有意义的名字,但是这个名字在rc文件里面要是唯一的,如果有重名的,那么之后的将会忽略掉。
    pathname 该应用程序在系统中的绝对路径 argument是传给该应用程序的参数。






options主要包括
critical 据设备相关的关键服务,如果在4分钟内,此服务重复启动了4次,那么设备将会重启进入还原模式。 
disabled 该服务不能通过启动一类服务来启动,例如 即使该服务有定义option “class core” 也不能用class_start core来启动,只能以单独的名字来启动 start name.
setenv <name> <value> 设置环境变量 
socket <name> <type> <perm> [ <user> [ <group> ] ] 在/dev/socket/下创建一个unix domain的socket,并传递创建的文件描述符fd给服务进程.其中type必须为dgram或stream,seqpacket.用户名和组名默认为0 
user <username> 在执行此服务之前先切换用户名。当前默认为root. 
group <groupname> [ <groupname> ]* 类似于user,切换组名  默认为root
oneshot 当此服务退出时不会自动重启. 如果没有这个选项,只运行一次。
class <name> 给服务指定一个类属,这样方便操作多个服务同时启动或停止.默认情况下为default. 
onrestart 当服务重启时执行一条指令, 例如“onrestart exec /system/bin/myapp”则表示在服务重新启动的时候执行/system/bin/myapp这个应用。


下面就一个例子如何启动一个服务
定义一个服务
service Start__server /system/bin/Start__server //定义一个名字叫Start__server 的服务,该服务的路径在/system/bin/Start__server
    class main                                  //该服务属于main 的class
    user root
    group root


启动服务
on boot 
   class_start main      //启动所有属于main这个class的服务
如果服务的属性里面没有class的选项,例如                    
service Start__server /system/bin/Start__server                                   
    user root
    group root 
或者定义了disabled 的选项,例如
service Start__server /system/bin/Start__server  
    class main                                   
    user root
    group root
    disabled  
    
那么启动服务就需要下面的语句
on boot
   start  Start__server 
 
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android init.rc文件语法详解 的相关文章

随机推荐

  • yml注入map

    记录一次yml文件注入Map 首先是配置类 Component Configuration PropertySource value classpath application yml encoding utf 8 Configuratio
  • tensorflow 模型文件

    我的书 购买链接 京东购买链接 淘宝购买链接 当当购买链接 tensorflow生成的模型文件主要有三个 meta index和 data 分成三个文件的原因是tensorflow将计算图结构和变量值存储在不同的文件里 meta文件描述的是
  • 优雅地理解线程池源码

    线程池源码 网上的一些博客对线程池的讲解都是逐行解读源码 看起来可能会比较费力 本文从功能角度出发 以整个流程为切入点 省去一些没必要的源码 带你逐层抽丝剥茧 理解线程池设计的精髓所在 前置知识 几个常量和变量 ctl是一个int类型的组合
  • FreeRTOS_中断

    传送门 博客汇总帖 传送门 Cortex M3 中断 异常 传送门 Cortex M3笔记 基础 笔记内容参考 正点原子的FreeRTOS开发手册 cortex m3权威指南 Cortex M3和Cortex M4权威指南等 文中stm32
  • 判断某字符串是否是有效的十进制数(leetcode算法题)

    判断某字符串是否是有效的十进制数 问题来源于自 leetcode 有效字符算法题 问题描述 验证给定的字符串是否可以解释为十进制数字 例如 0 gt true 0 1 gt true abc gt false 1 a gt false 2e
  • 【Docker】如何运行容器?

    文章目录 容器操作 容器相关命令 创建并运行一个容器 docker命令解析 nacos启动成功 访问 进入容器 修改配置文件 总结 接上集 CentOS 7安装Docker https blog csdn net qq 39017153 a
  • C#实现鸽巢排序

  • ESP32S2+VOIP移植- 481 call/transaction does not exist

    ESP32 SIP调试时一定注意 481 call transaction does not exist 问题 除了要注意Request URI Call ID Tag等一致性问题还有一个关键就是 CANCEL ACK 的CSeq 后的数字
  • Lottie 动效调研与实践

    Lottie 概述 https airbnb design lottie Lottie 官网 Lottie 是一个支持多端展示的动效库 相对于 OpenGL 动画 GIF Lottie 有着他独有的一些优点和优势 例如对比原生动画 api
  • wrk 性能测试带参数的接口

    wrk在使用带参数的接口进行压测时 参数会被过滤掉 比如 http 127 0 0 1 8080 benchmark name 1 userId 1 sex 1 这个接口 执行压测命令如下 wrk t5 c5 d30s http 127 0
  • 跨域请求中预检请求options之坑

    一 前言 因为跨域请求 浏览器可能 后面讲 会发送一次options请求 如果处理不好 跨域还是会gg的 之前很少涉及跨域 涉及也是简单请求 下面阮老师文章中区别热简单请求和复杂请求 所以基本不会很少关注options 后面就遇到坑了 下面
  • 【刷题版】掌握算法的一揽子计划——动态规划总结

    动态规划是一种通过将原问题分解为相对简单的子问题来求解 然后将子问题的解存储起来避免之后重复计算 并最终将子问题组合成原问题的解决方法 动态规划并不算是一种具体的算法 更应该被认为是一种解决问题的思想 动态规划通常适用于具有重叠子问题和最优
  • python开发库安装(pycharm)

    开发库安装 过程比较简单 随意说一下 这里我们使用的是pycharm这个开发工具 直接在pycharm中下载就可以 比较简单 看下面图片 第一步 第二部 第三步 搜索你想要安装的库 点击下面的安装就可以 提示安装成功就可以使用了 这里给大家
  • axios请求缓存

    源代码 import axios from axios 数据存储 export const cache data set key data bol false if bol localStorage setItem key JSON str
  • 百度搜索jquery自动完成补全插件autocomplete

    百度搜索框效果 这东西有个 专用的插件 jquery自动补全插件autocomplete js 专治这个 我也是才知道 真是孤陋寡闻 jQuery Autocomplete实现自动完成功能 搜索提示功能 罗曼飞羽 博客园 这里有讲 jque
  • 类型转换与运算符

    一 自动转换 隐士转换 当小范围数据向大范围数据转换时 会发生自动转换 二 强制转换 占内存大的数据向占内存小的转换时 会发生强制转换 如 int a 1 三 运算符 1 关系运算符 2 逻辑运算符 3 算术运算符 4 赋值运算符 5 字符
  • 基于深度学习lstm_基于LSTM的深度恶意软件分析

    基于深度学习lstm Malware development has seen diversity in terms of architecture and features This advancement in the competen
  • mac 环境安装Libpng

    采用brew的安装方式如果没有brew需要先安装brew 如果是第一次用brew安装软件 在安装Libpng 之前要先运行下 brew install xz 否则会报错 如果运行brew install xz 报错 是因为 usr loca
  • ubuntu install phabricator with nginx

    Installing Required Components If you are installing on Ubuntu or an RedHat derivative there are install scripts availab
  • android init.rc文件语法详解

    初始化语言包含了四种类型的声明 Actions 行动 Commands 命令 Services 服务 和Options 选项 基本语法规定 1 所有类型的语句都是基于行的 一个语句包含若干个tokens token之间通过空格字符分隔 如果