如何去写Android init.rc (Android init language)

深入分析AIL语言及init.rc文件 init.rc简介init.rc文件由系统第一个启动的init程序进行解析.它由”Android Init Language”语言编写而成.init.rc文件可以在你android设备根目录下找到.还记得我们上次编译的Android源码么?如果你已经编译过源码了,那么可以在out/target/generic/root/目录下找到该文件.要想读懂init.rc文件,首先要掌握AIL语言 阅读详情

Android初始化语言由四大类声明组成:行为类(Actions),命令类(Commands),服务类(Services),选项类(Options).

  * 初始化语言以行为单位,由以空格间隔的语言符号组成。C风格的反斜杠转义符可以用来插入空白到语言符号。双引号也可以用来防止文本被空格分成多个语言符号。当反斜杠在行末时,作为折行符。

  * 以#开始(前面允许有空格)的行为注释行。

  * Actions和Services隐含声明一个新的段落。所有该段落下Commands或Options的声明属于该段落。第一段落前的Commands或Options被忽略。

  * Actions和Services拥有独一无二的命名。在它们之后声明相同命名的类将被当作错误并忽略。

Actions

-------

Actions是一系列命令的命名。Actions拥有一个触发器(trigger)用来决定action何时执行。当一个action在符合触发条件被执行时,如果它还没被加入到待执行队列中的话,则加入到队列最后。

队列中的action依次执行,action中的命令也依次执行。Init在执行命令的中间处理其它活动(设备创建/销毁,property设置,进程重启)。

Actions表现形式为:

on <trigger>

   <command>

   <command>

   <command>

 

Services

--------

Services是由init启动,在它们退出时重启(可选)。Service表现形式为:

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

   <option>

   <option>

   ...

 

Options

-------

Options是Services的修饰,它们影响init何时、如何运行service.

 

critical

     这是一个设备关键服务(device-critical service) .如果它在4分钟内退出超过4次,设备将重启并进入恢复模式。

 

disabled

     这个服务的级别将不会自动启动,它必须被依照服务名指定启动才可以启动。

 

setenv <name> <value>

     设置已启动的进程的环境变量<name>的值<value>

 

socket <name> <type> <perm> [ <user> [ <group> ] ]

     创建一个名为/dev/socket/<name>的unix domin socket,并传送它的fd到已启动的进程。<type>必须为"dgram"或"stream".用户和组默认为0.

 

user <username>

     在执行服务前改变用户名。当前默认为root.如果你的进程需要linux能力,你不能使用这个命令。你必须在还是root时请求能力,并下降到你需要的uid.

 

group <groupname> [ <groupname> ]*

     在执行服务前改变组。在第一个组后的组将设为进程附加组(通过setgroups()).当前默认为root.

 

oneshot

     在服务退出后不重启。

 

class <name>

     为service指定一个类别名。同样类名的所有的服务可以一起启动或停止。如果没有指定类别的服务默认为"default"类。

 

onrestart

       当服务重启时执行一个命令。

 

Triggers

--------

     Triggers(触发器)是一个字符串,可以用来匹配某种类型的事件并执行一个action。

 

boot

     这是当init开始后执行的第一个触发器(当/init.conf被加载)

 

<name>=<value>

     当property <name>被设为指定的值<value>时触发。

 

device-added-<path>

device-removed-<path>

     当设备节点被添加或移除时触发。

 

service-exited-<name>

     当指定的服务存在时触发

 

 

Commands

--------

 

exec <path> [ <argument> ]*

     Fork并执行一个程序(<path>).这将被block直到程序执行完毕。最好避免执行例如内建命令以外的程序,它可能会导致init被阻塞不动。

 

export <name> <value>

     设定全局环境变量<name>的值<value>,当这个命令执行后所有的进程都可以取得。

 

ifup <interface>

     使网络接口<interface>联机。

 

import <filename>

     解析一个init配置文件,扩展当前配置文件。

 

hostname <name>

     设置主机名

 

chmod <octal-mode> <path>

     改变文件访问权限

 

chown <owner> <group> <path>

     改变文件所属和组

 

class_start <serviceclass>

     当指定类别的服务没有运行,启动该类别所有的服务。

 

class_stop <serviceclass>

     当指定类别的服务正在运行,停止该类别所有的服务。

 

domainname <name>

     设置域名。

 

insmod <path>

     加载该路径<path>的模块

 

mkdir <path> [mode] [owner] [group]

     在<path>创建一个目录,可选选项:mod,owner,group.如果没有指定,目录以755权限,owner为root,group为root创建.

 

mount <type> <device> <dir> [ <mountoption> ]*

     尝试mount <device>到目录<dir>. <device>可以用mtd@name格式以命名指定一个mtd块设备。<mountoption>包含"ro","rw","remount","noatime".

 

setkey

     暂时没有

 

setprop <name> <value>

     设置系统property <name>的值<value>.

 

setrlimit <resource> <cur> <max>

     设置resource的rlimit.

 

start <service>

     启动一个没有运行的服务。

 

stop <service>

     停止一个正在运行的服务。

 

symlink <target> <path>

     创建一个<path>的符号链接到<target>

 

sysclktz <mins_west_of_gmt>

     设置系统时区(GMT为0)

 

trigger <event>

     触发一个事件。用于调用其它action。

 

write <path> <string> [ <string> ]*

     打开<path>的文件并写入一个或多个字符串。

 

 

Properties

----------

Init会更新一些系统property以提供查看它正在干嘛。

init.action

     当前正在执行的action,如果没有则为""

 

init.command

     被执行的命令,如果没有则为""

 

init.svc.<name>

     命名为<name>的服务的状态("stopped", "running", "restarting")

 

 

init.rc 示例:

-----------------

 

# not complete -- just providing some examples of usage

#

on boot

   export PATH /sbin:/system/sbin:/system/bin

   export LD_LIBRARY_PATH /system/lib

 

   mkdir /dev

   mkdir /proc

   mkdir /sys

 

   mount tmpfs tmpfs /dev

   mkdir /dev/pts

   mkdir /dev/socket

   mount devpts devpts /dev/pts

   mount proc proc /proc

   mount sysfs sysfs /sys

 

   write /proc/cpu/alignment 4

 

   ifup lo

 

   hostname localhost

   domainname localhost

 

   mount yaffs2 mtd@system /system

   mount yaffs2 mtd@userdata /data

 

   import /system/etc/init.conf

 

   class_start default

 

service adbd /sbin/adbd

   user adb

   group adb

 

service usbd /system/bin/usbd -r

   user usbd

   group usbd

   socket usbd 666

 

service zygote /system/bin/app_process -Xzygote /system/bin --zygote

   socket zygote 666

 

service runtime /system/bin/runtime

   user system

   group system

 

on device-added-/dev/compass

   start akmd

 

on device-removed-/dev/compass

   stop akmd

 

service akmd /sbin/akmd

   disabled

   user akmd

   group akmd

 

调试

---------------

默认情况下,init执行的程序输出的信息和错误到/dev/null.为了debug,你可以通过Android程序logwrapper执行你的程序。这将复位向输出/错误输出到Android logging系统(通过logcat访问)。

例如

service akmd /system/bin/logwrapper /sbin/akmd

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/magicyu2/archive/2010/03/18/5392524.aspx

【R语言】基于Biomod2集成平台探究物种分布区的构建流程(SDMs) 我为什么想要写这个内容呢?其实我已经想了很久了,但是一直没有把所有的代码给理清楚,此外这将是我之后研究的主要方向。本博客讲述了如何基于Biomod2集成平台构建物种分布模型的全流程,以及我在使用该模型时的一些心得,同时还有我提供的一些小福利(一键处理代码),可以十分快捷的帮助你完成SDMs的构建,写出你的中英文论文。 阅读详情

相关推荐

DAIC-WOZ抑郁数据集实战:从申请到特征提取的全流程避坑指南

本文详细解析了DAIC-WOZ抑郁数据集从申请到特征提取的全流程,提供了实用的避坑指南和代码模板。涵盖数据获取技巧、多模态特征工程(面部动作单元、音频特征、文本处理)以及样本不平衡解决方案,帮助研究者高效处理这一经典抑郁分析数据集。

weixin_29196315的博客 171

Android Init Language

在 Android 项目开发过程中,我们经常会碰到大量的 .rc 文件,例如:init.rc、 init.mtxxxx.usb.rc 等。这些 .rc 文件究竟是什么?按照什么规则去编写?又如何去被使用的?

笔记 568

傻白入门芯片设计,wafer/die/chip/cell(一)

芯片设计的一些基本概念

qq_46675545的博客 2万+

Android Init Language--安卓初始化语言

1、Android Init Language Android Init Language,也就是Android初始化语言,就是init.rc文件的语法 Android 初始化语言包含五种主要的语句类:Actions, Commands, Services, Options, and Imports.(操作,命令,服务,选项和导入) 所有这些都是...

PefectWorld的博客 924

jmeter5.4.1 使用案例

jmeter主要用于接口压力测试,模拟海量请求并发访问接口 1.下载jmeter https://jmeter.apache.org/download_jmeter.cgi 2.启动jemter 双击即可 3.配置jmeter 1.先更改语言 2.创建线程组 配置线程执行规划 3.创建http请求默认值 4.创建http请求 5.创建http信息头管理器 指定 Content-Type:application/json 6.创建响应断言 7.创建察看结果数 直接点击 执行 按.

SpringHASh的博客 1221

0基础手把手搭建 Trae\+Seedance2\.0 真人短剧生成智能体(可直接运行)

前言:本文专为0基础新手编写,全程无复杂代码、无专业术语,一步一截图提示(操作路径清晰),只需跟着点鼠标、复制粘贴,就能搭建出可自动生成真人短剧的智能体,生成的短剧可直接导出发布。核心工具:Trae(字节跳动AI IDE,免费)+ Seedance2.0(真人视频生成API,公测免费),无需提前学习编程、设计,全程10-15分钟搞定。 适用人群:0基础小白、想快速生成真人短剧(自媒体、短视频创作者)、无需懂技术即可实现自动化短剧生成的人群。

skygulangfendouz的专栏 1058

Android Init language

Android Init Language 对于大多数的Android开发者来说,Init语言使用频率应该不高; 但是阅读.rc文件对理解开机过程很有帮助,所以还是要学习下Init语言。下面的内容来自于/system/core/init目录下的readme文件,readme算是官方文档了,当作手册来用。 语法 Android Init 语言比较简单,只有五种类别的声明/语句:Actio

Dylan_Sen的博客 1587

一文看懂—Agent多智能体协作

多智能体协作已成为AI应对复杂任务的关键范式,通过模拟人类团队分工,实现专业化、高效化和纠错能力。本文系统阐述了多智能体协作的核心概念(智能体分工、工作流编排、工具使用)、与产品规划的关联(任务拆解、错误处理、组织架构设计),以及典型应用场景(报告生成、客服工单、学习规划)。同时剖析了常见陷阱(循环卡死、信息失真、成本失控)及解决方案,并提供了实用工具模板(角色定义卡、工作流画布、成本仪表盘)。最后通过市场竞品分析和旅行规划两个实战案例,展示了多智能体协作的实际价值。该技术正推动AI从单点智能迈向系统智能,

lee006006的博客 1033

Android Init Language语法概述

init.rc概述   init.rc是Androrid的可配置初始化文件,其由init负责解析,在定制开发下可在init.rc中添加指令来改变系统启动过程。此配置文件使用的Android Init Language是一种类C风格的程序语言,主要由Actions、Commands、Services、Options四大板块的语句组成,一般一条语句占据一行,单词之间由空格分隔。   AIL语言的注释一...

乌啼夜的酒痕 489

20道SpringSecurity常见面试题汇总(超详细回答 !!!)

本文中,我们将探讨一些与 Spring Security 相关的面试问题。Spring Security 是一款流行的 Java 应用程序安全框架,它提供了一套全面且易于使用的安全解决方案。

小斜同学的博客 3076

(MATLAB)一维信号峰值检测findpeaks

一维信号波峰波谷检测,峰值、峰宽、到达时间计算。MATLAB自带的findpeaks函数能完成这一任务,在这里分享其基本用法与特殊用法。

HPC_ZY 2万+

如何去写 Android init.rc (Android init language)

Commands:命令 Actions: 动作 Triggers:触发条件 Services:服务 Options: 选项 Propertise:属性 (1) Commands是一些基本的操作,例如:     mkdir /sdcard 0000 system system     mkdir /system     mkdir /data 0771 system syste

千里之外 1372

Android Input——输入系统介绍(一)

Input 系统对于提供流畅、灵敏和一致的用户交互体验至关重要,它需要在不同的设备、场景和应用中保证输入事件的正确性、及时性和安全性。Android 输入系统是一个复杂但高效的设计,旨在处理来自各种输入设备(如触摸屏、键盘等)的用户交互,并将这些交互转换为应用程序可以理解和响应的形式。EventHub:输入系统的最底层,直接与硬件通信,监听和读取输入设备的原始事件。:从 EventHub 获取原始输入事件,对其进行解析,转化为更高层次的事件,以便上层应用或服务能够理解。

小旭的专栏 1711

Android Init Language(RC文件)介绍

Android Init Language介绍基本概念什么是rc文件?Android Init进程用rc做了什么?相关内容Android RC文件应用Android rc文件语法解析Line-oriented语法组成ActionServicesOption和CommandTriggerimport 基本概念 什么是rc文件? rc文件,是用Android Init Language编写的特殊文件。用这种语法编写的文件,统一用".rc"后缀。 所有rc文件,不会被编译/链接。它是配置文件,不是程序,是一种用于

林多 4158

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android init.rc整理

AIL概述 init.rc由AIL语言编写而成。可以参考system/core/init/README.md来学习AIL语法相关知识。不同Android版本关于AIL的说明存在一些细微差异,但基本语法和总的思路是不变的。往往我们可以先查看对应的system/core/init/README.md来了解这些差异。 以下是我们参考Android11下的system/core/init/README.md,对AIL的学习总结。 Android Init Language由五大类语句组成:Actions, Com

愿有岁月可回首,且以深情共白头 6136

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android Init Language : init.rc

Android Init Language system\core\init\README.md 1、相关配置目录 /system/etc/init/ 用于核心系统项,例如SurfaceFlinger、MediaService和logd。 /vendor/etc/init/ 用于SoC供应商项,如actions或核心SoC功能所需的守护程序。 /odm/etc/init/ 用于设备制造商项目,例如运动传感器或其他外围设备所需的操作或守护程序功能。 2、init.rc 语法 主要有 Actions、

许浑的博客 1821

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android 11--- init.rc文件介绍

在Android 11中,init.rc文件是一个关键的配置文件,它负责系统的初始设置和启动流程。提示:以下是本篇文章正文内容,下面案例可供参考续行:使用反斜杠 \ 可以将一行代码分成多行。转义:使用反斜杠或双引号转义空白字符。空白字符:rc 文件中的标记由空白字符分隔。注释:以 # 开头,用于说明代码。

weixin_43129806的博客 1505

【init.rc】Android Init Language (AIL) 语法参考手册

这是一份非常详尽的 Android Init Language (AIL) 语法参考手册。

特立独行的博客 1384
上一篇: C++提供了四种新的类型强制
下一篇: 常用电平转换方案
WeekyHuang
博客等级 码龄21年 5粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值