Android 7.0 init.rc的一点改变

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

在Android 7之前的版本中,系统Native服务,不管它们的可执行文件位于系统什么位置都定义在根分区的init.*.rc文件中。这造成init*.rc文件臃肿庞大,给维护带来了一些不便,而且其中定义的一些服务的二进制文件根本不存在。

但在android 7.0中,对该机制做了一些改变 。

  1. 单一的init*.rc,被拆分,服务根据其二进制文件的位置(/system,/vendor,/odm)定义到对应分区的etc/init目录中,每个服务一个rc文件。与该服务相关的触发器、操作等也定义在同一rc文件中。 
    • /system/etc/init,包含系统核心服务的定义,如SurfaceFlinger、MediaServer、Logcatd等。
    • /vendor/etc/init, SOC厂商针对SOC核心功能定义的一些服务。比如高通、MTK某一款SOC的相关的服务。
    • /odm/etc/init,OEM/ODM厂商如小米、华为、OPP其产品所使用的外设以及差异化功能相关的服务。

这样的目录结构拆分,也与Android产品的开发流程相吻合,减轻了维护的负担。下图为Android7.0 模拟器/system/etc/init中定义的服务。

david@daviddeMBP:~$ adb shell
generic_x86:/ $ su
generic_x86:/ # cd /system/etc/init
generic_x86:/system/etc/init # ls
atrace.rc       gatekeeperd.rc mediacodec.rc     rild.rc
audioserver.rc  init-debug.rc  mediadrmserver.rc servicemanager.rc
bootanim.rc     installd.rc    mediaextractor.rc surfaceflinger.rc
bootstat.rc     keystore.rc    mediaserver.rc    uncrypt.rc
cameraserver.rc lmkd.rc        mtpd.rc           vdc.rc
debuggerd.rc    logcatd.rc     netd.rc           vold.rc
drmserver.rc    logd.rc        perfprofd.rc
dumpstate.rc    mdnsd.rc       racoon.rc
generic_x86:/system/etc/init #
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.提供一个编译宏LOCAL_INIT_RC用于将服务相关的RC文件编译到相应位置。这能确保服务定义和服务的可执行文件同时存在,避免了之前出现的服务对应的可执行程序不存在的问题。 
例如logcatd的Android.mk中,通过LOCAL_INIT_RC将logcatd对应的logcatd.rc编译到/system/etc/init目录中。

#system/core/logcat/Android.mk
include $(CLEAR_VARS)

LOCAL_MODULE := logpersist.start
LOCAL_MODULE_TAGS := debug
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_INIT_RC := logcatd.rc
LOCAL_MODULE_PATH := $(bin_dir)
LOCAL_SRC_FILES := logpersist
ALL_TOOLS := logpersist.start logpersist.stop logpersist.cat
LOCAL_POST_INSTALL_CMD := $(hide) $(foreach t,$(filter-out $(LOCAL_MODULE),$(ALL_TOOLS)),ln -sf $(LOCAL_MODULE) $(TARGET_OUT)/bin/$(t);)
include $(BUILD_PREBUILT)
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.在init执行mount_all指令挂载分区时,会加载这些目录中的rc文件,并在合适的时机运行这些服务和操作。下面位Android7.0模拟器的log。

[    0.912389] init: init first stage started!
---------加载根分区的rc文件
[    0.996447] init: waitpid failed: No child processes
[    0.996558] init: (Loading properties from /default.prop took 0.00s.)
[    0.997274] init: (Parsing /init.environ.rc took 0.00s.)
[    0.997457] init: (Parsing /init.usb.rc took 0.00s.)
[    0.997561] init: (Parsing /init.ranchu.rc took 0.00s.)
[    0.997823] init: (Parsing /init.usb.configfs.rc took 0.00s.)
[    0.997876] init: (Parsing /init.zygote32.rc took 0.00s.)
[    0.997895] init: (Parsing /init.rc took 0.00s.)
[    1.121126] init: Starting service 'ueventd'...
[    1.121422] init: Waiting for /dev/.coldboot_done...

-----------挂载分区,加载附加rc文件
[    1.384113] EXT4-fs (vdc): Ignoring removed nomblk_io_submit option
[    1.386155] EXT4-fs (vdc): mounted filesystem with ordered data mode. Opts: nomblk_io_submit,errors=panic
[    1.386165] SELinux: initialized (dev vdc, type ext4), uses xattr
[    1.386179] fs_mgr: __mount(source=/dev/block/vdc,target=/data,type=ext4)=0
[    1.387397] init: (Parsing /system/etc/init/atrace.rc took 0.00s.)
[    1.387762] init: (Parsing /system/etc/init/audioserver.rc took 0.00s.)
[    1.388078] init: (Parsing /system/etc/init/bootanim.rc took 0.00s.)
[    1.388424] init: (Parsing /system/etc/init/bootstat.rc took 0.00s.)
[    1.388805] init: (Parsing /system/etc/init/cameraserver.rc took 0.00s.)
[    1.389125] init: (Parsing /system/etc/init/debuggerd.rc took 0.00s.)
[    1.389443] init: (Parsing /system/etc/init/drmserver.rc took 0.00s.)
[    1.389781] init: (Parsing /system/etc/init/dumpstate.rc took 0.00s.)
[    1.392698] init: (Parsing /system/etc/init/gatekeeperd.rc took 0.00s.)
[    1.393060] init: (Parsing /system/etc/init/init-debug.rc took 0.00s.)
[    1.393361] init: (Parsing /system/etc/init/installd.rc took 0.00s.)
[    1.393674] init: (Parsing /system/etc/init/keystore.rc took 0.00s.)
[    1.393992] init: (Parsing /system/etc/init/lmkd.rc took 0.00s.)
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

相关内容可以参考android 7.0 system/etc/init/readme.txt.

原文链接:http://blog.youkuaiyun.com/sunao2002002/article/details/52454878

EMMC 坏块 [ 17.608802] Rebooting in 5 seconds.. [ 22.611205] Going down for restart now [ 22.614757] Calling SCM to disable SPMI PMI Format: Log Type - Time(microsec) - Message - Optional Info Log Ty 阅读详情

相关推荐

Android7.0 init.rc流程分析

在http://blog.csdn.net/kc58236582/article/details/52247547这篇博客中,我们分析了init进程的流程,现在我们结合代码主要分析init.rc脚本的流程。   首先我们会加载原生的init.rc,然后我们自己的一些内容放在自己的init.rc中。然后会在原生的init.rc中import。 而原生会通过ro.hardware这个属性,来获取...

kc58236582的博客 4775

Android mk文件 LOCAL_INIT_RC 将RC文件编译到/system/etc/init或vendor/etc/init,system\core\init\init.cpp解析这些rc

一、看下面的Android.mk 的,里面有个LOCAL_INIT_RC,那这个什么意思呢? 二、编译宏LOCAL_INIT_RC用于将服务相关的RC文件编译到相应位置。上面的Android.mk通过LOCAL_INIT_RC将对应的batterywarning.rc编译到/system/etc/init目录中。 三、 来看一下batterywarning.rc,可以看出sys.boot_completed等于1的时候就执行这个bin文件。 四,那在哪里解析这个rc文件呢?这个问题...

海月汐辰 5848

Android 修改init.rc 添加开机自启服务

开机自启服务:ademo 完成任务:写入一条日志前提:这里我们假定我们已经成功将可执行文件编译到系统中,具体编译方式请参考博文 android 7.1 修改源码添加可执行文件到system/bin目录 可执行文件名称为 位于/system/bin目录下,可执行文件源码 ademo.c 如下: 1. 在 init.rc 中添加自己的服务 init.rc 位置: 1.2 设置启动时机 设置启动时机为开机自启 2. 设置SELinux策略(sepolicy) 文件路径:修改文件,增加如下行: 2.2 新建adem

weixin_37840904的博客 6234

init.rc深入学习

语法部分 actions service options commandscommands initrc的变化 initcpp LOCAL_INIT_RC

ch853199769的博客 9694

android init进程解析init.rc过程

开发板:samsung-exynos4412,android4.0.4 调试android设备驱动时经常需要修改init.rc和init.hardware.rc文件,init.rc经常修改,然而里面定义的trigger事件执行,谁先谁后一直没有特别在意,跟踪代码之后做个小结 文件路径:/system/core/init/*.*,里面有个readme.txt文件详细说明了Android init

uranus_wm的专栏 6842

Android 7.0系统启动流程分析

简单的分析Android 7.0系统启动流程

Floating Cat 1万+

分区错误问题调查

EXT4分区错误调查

shalan88的博客 817

Android14 init.rc详解2

介绍Android init中修饰Service的Options和Command

lvyaer_1122的博客 968

init android x86 rc,Android 7.0 init.rc的一點改變

在Android 7之前的版本中,系統Native服務,不管它們的可執行文件位於系統什么位置都定義在根分區的init.*.rc文件中。這造成init*.rc文件臃腫龐大,給維護帶來了一些不便,而且其中定義的一些服務的二進制文件根本不存在。但在Android 7.0中,對該機制做了一些改變 。單一的init*.rc,被拆分,服務根據其二進制文件的位置(/system,/vendor,/odm)定義到...

weixin_29276847的博客 212

【开关】刀开关矩阵(Pole Switched Matrix)的结构讨论

矩阵主要有交叉点矩阵和树形矩阵两种矩阵结构。 交叉点矩阵是由SPST继电器排列成简单的网格形式的阵列组成;树形矩阵是由树形的多路复用模块组成,为需要高频RF带宽的应用提供解决方案。在搭建这些矩阵的同时,也限制了可提供的连接性。这也是为什么有的矩阵是简单的交叉点矩阵,而有的矩阵的交叉点中嵌入隔离继电器用来提供中间带宽的矩阵。 但是,Pickering Interfaces提供的另外一种矩阵类型其...

Tina的博客 4407

WPS占用C盘空间解决方案与优化技巧

办公软件在长期使用过程中会产生大量缓存和历史文件,这些文件往往隐藏在系统目录中,导致磁盘空间被无声占用。以WPS为例,其版本历史备份、云同步缓存和模板库是主要空间占用源。通过分析文件存储机制,可以定位到具体的缓存路径,如AppData目录下的Kingsoft文件夹。针对这一问题,有效的解决方案包括手动清理、自动化脚本和注册表优化。对于需要持续监控的场景,可以结合PowerShell脚本和任务计划实现自动化管理。在实际应用中,这些技术不仅适用于WPS,也可迁移到其他办公软件的空间优化中,是每位IT运维人员和高

weixin_30788239的博客 458

Android7.0解析Init.rc文件

    在解析Init.rc之前需要对init.rc文件有一个认识,init.rc是由一种被称为"Android初始化语言"(Android Init Language,这里简称为AIL)的脚本写成的文件.该语言是由语句组成的,主要包含了五种类型的语句:ActionCommandsServicesOptionsImport 在init.rc文件中一条语句通常占用一行,单词之间是用空格符来相隔的。如...

宇落 生命不息,奋斗不止...... 9861

Unity 2D精灵点击交互实现:从BoxCollider 2D到Event Trigger的完整指南

本文提供了Unity 2D精灵点击交互的完整实现指南。通过详细拆解BoxCollider 2D与Event Trigger两大核心组件的协同工作原理,手把手教你为Sprite Renderer添加点击、悬停等事件响应。文章包含从基础配置到进阶优化、性能调试的实战步骤,帮助开发者高效实现游戏世界内的对象交互,是Unity 2D开发的实用教程。

ansible6ops的博客 301

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

Windows 11下WSL2安装CUDA避坑指南:从驱动版本匹配到环境变量配置

本文详细解析了在Windows 11的WSL2中搭建CUDA开发环境的完整流程与核心避坑要点。关键在于理解“驱动在Windows,工具链在Linux”的独特架构,并确保显卡驱动与CUDA Toolkit版本严格匹配。指南涵盖了从驱动验证、WSL-Ubuntu专用仓库安装、环境变量配置到GCC版本冲突、GPU算力不匹配等常见问题的解决方案,帮助开发者高效构建稳定的深度学习与高性能计算环境。

smartcontract5的博客 467

【导航理论&实战篇】四足机器人弹簧倒立摆(SLIP)动力学模型

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对四足机器人动力学模型-VMC、SLIP和浮动机体模型做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章四足机器人弹簧加载倒立摆(SLIP)动力学模型是一种用于描述和分析四足机器人在运动过程中动态特性的理论模型。这种模型将四足机器人的腿部简化为弹簧,而机器人的身体则被视为一个倒立摆,这样的抽象使得研究者能够更容易地分析和控制机器人的运动。提示:以下是本篇文章正文内容。

qq_35635374的博客 806

Android7.0 init进程源码分析

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

橡果生长记的博客 1万+

Pandas滚动窗口的妙用:动态计算列数据的最大值

Pandas的滚动窗口(rolling window)功能是数据分析中处理时间序列数据的重要工具。本文通过实例演示了如何使用rolling(window=4).max()计算DataFrame列A的滚动最大值,并将结果存入新列Max_Range。该方法会在4个元素的滑动窗口内计算最大值,前3行因数据不足显示为NaN。这种技术广泛应用于金融分析(如股价波动)、数据平滑和趋势识别等场景,能有效帮助分析数据的动态变化特征。示例展示了从数据准备到结果输出的完整流程,体现了Pandas在处理滑动窗口计算时的高效性和便

m0_74337424的博客 53

android7 init,Android7.0 init.rc流程分析

在http://blog.csdn.net/kc58236582/article/details/52247547这篇博客中,我们分析了init进程的流程,现在我们结合代码主要分析init.rc脚本的流程。首先我们会加载原生的init.rc,然后我们自己的一些内容放在自己的init.rc中。然后会在原生的init.rc中import。而原生会通过ro.hardware这个属性,来获取我们设备自己的...

weixin_29421565的博客 410

01 - 什么是SVM

摘要:SVM(共享虚拟内存)技术使CPU和GPU能共享同一虚拟地址空间,简化异构计算编程。传统模型需手动管理CPU/GPU内存和拷贝数据,而SVM允许直接传递指针,自动处理页面迁移和一致性维护。其核心包括统一地址空间、按需迁移、页面故障处理和一致性管理,显著降低编程复杂度并提升性能。通过HMM框架、MMU通知和GPU页面异常等机制实现高效内存共享,支持复杂数据结构,为异构计算带来便利。

图形/计算GPU的驱动与虚拟化技术分享园地 3132

基于Playwright和反爬虫规避技术的雪球股票讨论数据采集方案

随着量化投资和社交投资的兴起,雪球作为中国领先的投资社交平台,其用户讨论数据成为研究市场情绪的重要来源。本文将详细介绍如何使用最新的Playwright技术和反爬虫规避策略,构建一个高效、稳定的雪球股票讨论爬虫系统。本文详细介绍了基于Playwright的雪球股票讨论爬虫实现方案,涵盖了从基础配置到高级反爬虫策略的各个方面。AI驱动的反爬虫对抗更智能的请求调度算法区块链技术在数据溯源中的应用联邦学习在数据采集中的运用。

2201_76125261的博客 1009
上一篇: GPIO配置和管理
下一篇: linux内核 DebugFS
makeyourprogress
博客等级 码龄11年 26粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值