【Android7.1.2源码解析系列】实战分析init.rc文件

Android源码之init.rc文件详解 一、引言 .rc文件是 android系统一个十分重要的文件。 其是资源文件,包括比如对话框、菜单、图标、字符串等资源信息。 使用.rc资源文件的目的是为了对程序中用到的大量的资源进行统一的管理。 本文来了解文件的规则。 二、init.rc Android init.rc文件由系统第一个启动的init程序解析。是启动系统服务使用的文件。 三、文件规则 类型 主要包含了四种类型的语句: 1、Acti... 阅读详情

实战分析init.rc文件

 

前言:经过上一篇的/system/core/init/readme.txt文件的翻译,对于init.rc的语法也有了一定的了解,这一篇就对/system/core/rootdir/init.rc文件进行一个分析,希望能够借此对android的开机过程有一定的了解。

 

关联文章:init.rc语法翻译、init.rc全流程分析注释

一、综述

1、rc文件语法综述:

 

首先抛出一个结论:

action是“触发器-执行功能”一对多的关系,一个触发条件然后执行多个程序。

Service是“触发器-执行功能”多对一的关系,针对于一个程序来设置多个触发的目标。

 

基于这个基础的认知,对于init.rc语法的学习就比较简单了。

 

Init.rc文件是android当中的启动脚本文件,语法非常的简单,可以认为init.rc文件中只有action和service两种内容形式,对这两种内容分别给出一个例子:

 

Action:

 

on init

# 设置系统时钟

    sysclktz 0

# 设置日志等级

    loglevel 3

 

    # Backward compatibility

# 直译,增强兼容性

# 将system/etc链接到/etc,将sys/kernel/debug链接到/d

    symlink system/etc /etc

symlink sys/kernel/debug /d

……(省略后半部分)

 

说明:action中,语法为:

on ***

Command1

Command2

...

此处,***就是action的触发条件,后面的command1、command2等等就是当***条件触发后将会执行的命令。

以此处的on init为例,当系统处于初始化时,触发了init条件(这里先不管init怎麼触发的),于是开始执行以下命令symlink system/etc /etc 建立两个目录的符号链接,同样的下一句symlink也是建立两个目录之间的符号链接。这样再依次执行以后省略号之中的内容。

 

Service:

 

service servicemanager /system/bin/servicemanager

    class core

    user system

    group system

    critical

    onrestart restart healthd

    onrestart restart zygote

    onrestart restart media

    onrestart restart surfaceflinger

    onrestart restart drm

 

说明:service中,语法为:

 

Service 名称 路径

描述1

描述2

...

如同之前提到的,与action不同,service是由多个条件触发一个行为,而这里的名称就是所要执行的文件的名称,路径是此文件所位于的路径,而描述1、描述2就是此文件运行的时机和条件(不完全是,有一部分是对于文件的分类、权限、等级的描述等,这里先不管)。

以此处的service为例,servicemanager所处的位置位于/system/bin/servicemanager,后面的class core、user system、group system、critical设置了service所处的类别、用户、用户组、以及严重的级别,这些是针对于进程属性的配置,这里先不管。后面的多个onrestart语句就是该程序能造成的触发结果,后面的几句onrestart的意思就是当此service重启的时候,重新启动healthd、zygote、media、surfaceflinger、drm进程。


 

二、init.rc分析

对于init.rc文件的全面分析已经在之前的文章当中做过了,想要看的同学可以点击这里进行查看,而此处是对于init.rc的总体流程进行分析,如果有疑问或不清楚的地方欢迎留言进行讨论。

Init.rc的主要步骤:

1、导入其他预配置rc文件

2、进行early-init,设置init进程的信息(包括优先级、权限、selinux配置),开启ueventd。early-init的主要工作是对init进程进行初始化。

3、Init部分创建了一些目录结构,对于文件进行挂载,然后对于系统中的内存与进程进行了配置,cpu运行的数据以及一些权限的管理。总的来说,init部分主要进行了android目录下大的文件夹的创建工作,包括system、data、cache、config、/mnt/storage(sdcard),对于系统的内存配置、进程配置、权限配置进行了初始化。这里可以得知,对于操作系统来说,最基本的还是文件,所以init部分也是首先初始化了文件的分类存放位置,然后对于一些必要的可选项进行了配置,而配置的方式依然是写入文件当中。

4、设置有关充电模式的内容

5、Init-late部分,主要是创建更深层次的子目录并创建对应的数据。

 

总结一下:前五步可以说就是所有action当中的内容,我们可以看出,action部分主要完成了以下的工作:配置系统的文件目录结构与数据、配置系统的内存管理、进程管理以及权限管理的数据。 可以说,action部分是一些静态的配置,而接下来的service部分就是一些动态的进程的配置了。

 

6、对于动态进程的部分,进程很多,触发条件也很多,就不一一赘述了,而这些进程主要按照分级、分类、分依赖三种划分方式进行划分,其中分级指的是对于进程的关键性的分级,比如critical标识的进程就是关键性的进程,发生错误时会造成系统的严重错误。而分类指的是将进程的功能进行分类,比如属于core类别、属于healthd类别等。而分依赖指的是说明了进程当中的互相依赖关系,而init.rc文件中service的编写就是主要体现了这种划分的方式。

 

 

三、总结

Android系统博大精深,对于init过程的梳理非常有助于对其整体框架的了解,而在init过程当中,大量的文件操作,也加深了我对于系统中“万物皆文件”这一思想的理解。学习过程中也应该更加积极的思考,对于android系统中每个部分的运行在了解它的存在的方式的同时,还要了解它的存在的原因,也就是它设计的思想,保持积极的思考。

Android init源代码分析(2)init.rc解析 本文描述init.rc脚本解析以及执行过程,读完本章后,读者应能 (1) 了解init.rc解析过程 (2) 定制init.rc init.rc介绍 init.rc是一个文本文件,可认为它是Android系统启动脚本。init.rc文件中定义了环境变量配置、系统进程启动,分区挂载,属性配置等诸多内容。init.rc具 阅读详情

相关推荐

Android 7.1.1源码(Nougat)

安卓7.1.1源码,个人路径下有安卓各版本的源码下载链接。

Android rc 文件的使用

应用中添加使用rc 0.在Android.mk同目录下新建文件haha.sh (文件名任意),执行shell操作,以下简单举例 #!/bin/sh rm -rf /system/etc/xxx 1. 在Android.mk同目录下新建文件test.rc (文件名任意) 含义:当设置系统属性persist.vendor.test.haha=2时,启动服务,执行shell脚本 on property:persist.vendor.test.haha=2 start haha-sh...

yinhunzw的专栏 9651

android-7.1.2_r1源码

android-7.1.2_r1源码

ubuntu24.04编译android7.1.2

以s5p6818支持的 android7 为例在ubuntu24.04中编译android7.1.2提示:以下是本篇文章正文内容,下面案例可供参考这里只记录了大体的流程,不同的编译环境还会遇到一些依赖包等之类的错误,需要自己安装.编译需要的内核版本要小于5.17这个问题网上提到的比较少.需要关注。

qq_34507011的博客 1363

Agent框架系列:1-低代码智能体平台深度解析Dify、Coze、n8n

Dify、Coze 和 n8n 是三大主流低代码智能体平台,各有侧重。Dify 适合企业级 AI 应用,具备强大的 RAG 和知识库管理能力,技术栈为 Python + React。Coze 由字节推出,主打零代码和快速原型开发,集成 60+ 插件,极适合非技术用户。n8n 以工作流自动化和系统集成为核心,支持 400+ 外部应用,基于 Node.js + Vue,扩展性极强。选择建议:非技术团队选 Coze,AI 应用选 Dify,复杂自动化与集成选 n8n。可根据实际需求混合使用,最大化平台优势。

3086

FastApi教程

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本的传送协议。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

小石潭记丶 1563

Android系统之init简析

本文代码环境为 Android7.1 概述: init是一个进程,确切的说,他是Linux系统中用用户空间的第一个进程。由于Android是基于Linux内核的,所以init也是Android系统中用户空间的第一个进程,它的进程号是1,作为天字一号 进程,init被赋予了很多极其重要的工作职责,本文重点关注其中两个比较关键的职责: 1 init进程负责创建系统中的几个关键进程,如 zygote,...

奶牛养殖场小马 857

MTK-Display技术解析:从MDP到DDP的架构演进

本文深入解析了联发科(MTK)显示技术从MDP到DDP的架构演进。MDP作为多媒体数据预处理中心,负责格式转换与缩放;而DDP则整合了OVL、COLOR、AAL等模块,并引入CMDQ与场景化模式,实现了从分散处理到统一智能调度的飞跃,旨在提升画质、流畅度并降低功耗。

weixin_29218509的博客 256

Android源码之init.rc文件详解(SELinux详解)

Android源码之init.rc文件详解(SELinux详解)

Android应用开发工程师 2930

【vLLM-性能洞察】基于Ascend Profiler的端到端推理瓶颈定位与优化实践

本文详细介绍了如何利用Ascend Profiler对vLLM-Ascend大模型推理服务进行端到端的性能瓶颈定位与优化。通过实战案例,阐述了从数据采集、可视化分析到诊断低效算子、内存管理、计算通信重叠及框架调度等常见瓶颈的全过程,为基于昇腾NPU的AI推理性能调优提供了系统性的方法论和实用工具指南。

cc789的博客 523

大模型系统构建的“三驾马车”——Prompt、Context与Harness工程

在LLM应用开发的早期阶段,我们热衷于比拼“提示词”的精妙程度。那时,一个精心构造的思维链CoT就能让模型的表现提升10%以上。随着大模型从“玩具”走向“生产系统”,我们逐渐意识到:单一的 Prompt 只是起点,而非终点。 真正的工业级应用,需要构建一套三层递进的工程体系——Prompt Engineering、Context Engineering 和 Harness Engineering。

西木风落 604

安卓11 init初始化以及init.rc的解析执行过程详解

最近做了一个高通平台安卓的需求,功能使得data分区在第一次启动时,自动适配emmc/ufs的实际大小,在此过程中对init的执行以及.rc文件的解析流程有了一些理解,趁热打铁!!在这里总结一下!!! 这里以mtk平台为例进行说明,基于安卓11,init这块的代码mtk与高通基本是一模一样的,都是中间层的东西; 对于init在整个系统中(宏观)的执行流程想必大家都很清楚了,init进程是linux内核启动后创建的第一个进程,地位非常重要,init进程在初始化过程中会启动很...

w346665682的博客 1万+

基于STM32L4XX、HAL库的RTL8201F 以太网收发器(PHY)驱动程序设计

define PHY_RESET_DELAY 1000 // PHY复位延迟(ms)#define PHY_AUTONEGO_DELAY 3000 // 自动协商延迟(ms)/* 检查PHY ID (RTL8201F的ID为0x001CC816) *//* 系统时钟配置,确保ETH有50MHz时钟 *//* 初始化CPU, AHB和APB总线时钟 */

zhusl6688的博客 813

【Android FrameWork】第五天:init加载RC文件

本文基于Android 12+源码,深入分析Init进程加载RC文件的机制。Init进程作为用户空间首个进程,通过解析RC文件(初始化脚本)控制系统启动流程。文章详细阐述了两个关键阶段:1)初始化解析环境(日志系统、文件系统挂载、解析器配置);2)RC文件解析过程(主文件解析、Import指令处理、Service/Action指令解析)。源码分析表明,Init通过Parser类实现指令映射,ServiceParser和ActionParser分别处理服务定义和动作指令,最终将配置存入全局管理类。该机制为理解

u012739527的博客 1851

Machine Unlearning: A Survey

机器学习已经引起了广泛的关注,并发展成为一种使能技术,用于广泛的高度成功的应用,如智能计算机视觉、语音识别、医疗诊断等。然而,由于隐私、可用性和/或被遗忘权,一些特定样本的信息需要从称为机器遗忘的模型中删除,这就产生了一种特殊的需求。这项新兴技术因其创新性和实用性而引起了学术界和工业界的极大兴趣。与此同时,这个雄心勃勃的问题导致了许多旨在应对其挑战的研究工作。据我们所知,没有任何研究分析过这一复杂的主题,也没有比较过现有的遗忘解决方案在不同场景下的可行性。因此,通过这项调查,我们旨在了解遗忘技术的关键概念。

c_cpp_csharp的专栏 1159

智能制造之物料详解

制造业业务系统中的物料流转贯穿需求、采购、生产到交付全流程,各系统协同实现精准追踪。需求阶段由CRM/ERP/PLM生成物料计划;采购入库阶段SCM/WMS/QMS完成采购质检;生产阶段MES/APS协调领料加工;成品交付阶段WMS/SCM处理出库物流。整个流程以BOM为蓝图,ERP为调度中心,通过数据联动实现物料状态、位置和数量的全链路可追溯。

cdfunlove的博客 656

MTD系列 - android平台上linux启动时init进程解析init.rc文件分析

<br />题记:<br /> 前段时间,分析linux中的nand驱动,不知不觉就搞到来MTD层,到了MTD层之后还行往上,却发现往上很难继续,<br />功夫不复有心人呐,终于有些思路,发现MTD设备存在很多用户,什么char,block,ftl,nftl,jffs,yaffs等比较多,<br />但是并不是所有的用户都经过了MTD的块设备层,比如jffs和yaffs文件系统就时直接建立在MTD的原始设备层之上的。<br />好奇心强了就会没完没了,想跟踪一下yaffs2文件系统的挂载过程,心有点大了,

zgolee的专栏 8296

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【Android7.1.2源码解析系列】init.rc全流程注释

# Copyright (C) 2012 The Android Open Source Project # # IMPORTANT: Do not create world writable files or directories. # This is a common source of Android security bugs. # # 分析开始 # 第一步,

Don't worry,be happy 5129

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

init.rc详解

Android启动过程中的init.rc文件解析

m0_49328056的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android7.0 init进程源码分析

主要对Android 7.0中,init进程的源码进行分析。

橡果生长记的博客 1万+

Android 源码 解析 init.rc 脚本

init.rc 脚本是在 init.cpp 入口方法 main 中开始解析的,实际工作调用了 init_parser.cpp 内的 init_parse_config_file 方法。 system/core/init/init.cpp ...... int main(int argc, char** argv) { ...... // 解析 init.rc 脚本 init...

洪伟的专栏 792

Android Framework分析(1)-init

init进程(pid=1)是Linux系统中用户空间的第一个进程,主要工作如下:创建一块共享的内存空间,用于属性。

bugyinyin的博客 1716

Android 源码解析:深入理解 init.rc 文件

本文深入解析了Android初始化脚本init.rc的核心语法结构。主要介绍了四大核心语句:动作(Action)、命令(Command)、服务(Service)和选项(Option),阐述了其隐式声明机制和命名唯一性规则。重点分析了服务配置的关键参数和重启策略,并以init.zygote32.rc为例详细解读了服务配置实践。文章还系统梳理了常用命令和触发器类型,为理解Android系统启动流程提供了基础支撑。通过掌握这些核心概念,开发者能更深入地了解Android系统的初始化过程。

weixin_47540149的博客 793

Android14 init.rc详解1

init.rc的代码目录在//,该文件是由init进程解析,来初始化和启动PropertyService,启动zygote和servicemanager进程。

lvyaer_1122的博客 1393

Android init 启动进程分析

Android init 启动进程主要分三个阶段分析: 概述,Init如何被启动 Init进程启动的源码分析 rc语法分析 1.概述: init进程是linux系统中用户空间的第一个进程,进程号为1. 当bootloader启动后,启动kernel,kernel启动完后,在用户空间启动init进程,再通过init进程,来读取init.rc中的相关配置,从而来启动其他相关进程以及其他操作。 init进程被赋予了很多重要工作,init进程启动主要分为两个阶段: 第一个阶段完成以下内容: ..

u010783226的专栏 3216

android7.1.2启动流程分析之init程序

安卓系统跟目录下的init.rc初始化脚本配置文件默认放置在android源码树的system/core/rootdir目录(类同于传统linux系统下使用busybox生成的/sbin/init程序去解析/etc/inittab文件) android中的/init程序会通过解析/init.rc和/init.&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;machine_name&amp;amp;amp;amp;amp;amp;amp;amp;amp

开阳-英飞凌-小华 530
上一篇: 解决android libcore局部编译时`out/target/common/obj/JAVA_LIBRARIES/sqlite-jdbc_intermediates/javalib.jar'
下一篇: 自旋锁和互斥锁的区别
class_brick
博客等级 码龄12年 223粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值