【android学习笔记】init.rc中声明的守护进程启动的流程

Android启动初始化init.rc详解 一张图简单阐述一下(网络图片,侵删)Linux的重要特征之一就是一切都是以文件的形式存在的,例如,一个设备通常与一个或多个设备文件对应。这些与内核空间交互的文件都在用户空间,所以在Linux内核装载完,需要首先建立这些文件所在的目录。而完成这些工作的程序就是本文要介绍的init。Init是一个命令行程序。其主要工作之一就是建立这些与内核空间交互的文件所在的目录。当Linux内核加载完后,要做的第一件事就是调用init程序,也就是说,init是用户空间执行的第一个程序。 阅读详情

在Init.rc中,用service关键字声明了一系列服务.

init.rc对service的说明如下:(详见system/core/init/readme.txt)

Services--------Services are programs which init launches and (optionally) restartswhen they exit.  

Services take the form of:service <name> <pathname> [ <argument> ]*   <option>   <option>   ...

Options-------Options are modifiers to services.  

They affect how and when initruns the service.

critical   

This is a device-critical service. If it exits more than four times in   four minutes, the device will reboot into recovery mode.

disabled  

 This service will not automatically start with its class.   It must be explicitly started by name.

setenv <name> <value>   

Set the environment variable <name> to <value> in the launched process.

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

Create a unix domain socket named /dev/socket/<name> and pass   its fd to the launched process.  <type> must be "dgram", "stream" or "seqpacket".   

User and group default to 0.

user <username>   

Change to username before exec'ing this service.   Currently defaults to root.  (??? probably should default to nobody)   Currently, if your process requires linux capabilities then you cannot use   this command. You must instead request the capabilities in-process while   still root, and then drop to your desired uid.

group <groupname> [ <groupname> ]*   

Change to groupname before exec'ing this service.  Additional   groupnames beyond the (required) first one are used to set the   supplemental groups of the process (via setgroups()).   Currently defaults to root.  (??? probably should default to nobody)oneshot   Do not restart the service when it exits.

class <name>   

Specify a class name for the service.  All services in a   named class may be started or stopped together.  A service   is in the class "default" if one is not specified via the   class option.

onrestart    Execute a Command (see below) when service restarts.

可以看出,service中比较关键的几个选项是类别(class),启动选项(oneshot disabled,critical),用户组(group,user)。

以surfaceflinger为例:

service surfaceflinger /system/bin/surfaceflinger    

class main    

user system    

group graphics    

onrestart restart zygote

它的类别是main,用户是system,属于graphics ,且没有声明disabled,所以在启动main这个类别的时候,surfaceflinger就会被启动。

main类别是在哪里启动的呢?

搜索class_start关键字,在On boot的时候,就会启动了

on boot

  #省略无关.....

 class_start core    

 class_start main

readme中对class_start有如下说明:

class_start <serviceclass> 

Start all services of the specified class if they are   not already running.

class_stop <serviceclass> 

Stop all services of the specified class if they are   currently runn

RK3588安卓系统开机自启动:从广播到init.rc的四种方案与实战 在嵌入式系统与物联网设备开发中,开机自启动是实现设备自主运行、减少人工干预的核心机制。其原理在于操作系统启动流程中预设的钩子或服务管理机制,允许特定应用或进程在系统引导完成后自动执行。这一技术的价值在于保障关键服务(如数据采集、AI推理或人机界面)的即时可用性,是工控机、边缘计算盒子等产品化设备从“开发板”迈向“可靠产品”的关键一步。应用场景广泛覆盖工业自动化、智能零售终端、AIoT网关等领域。针对瑞芯微高性能AIoT芯片RK3588的安卓系统,实现稳定自启动需深入系统层,本文聚焦于**init.rc脚本* 阅读详情

相关推荐

RK3588安卓开机自启动:从广播到init.rc的嵌入式实战方案

在嵌入式系统开发中,开机自启动是实现设备专用化与无人值守运行的核心机制。其原理在于系统初始化后自动加载指定应用或服务,确保关键业务逻辑的持续执行。这一技术对于智能终端、工业控制等场景具有重要价值,能显著提升设备的可靠性与用户体验。在RK3588这类高性能AIoT平台上,实现稳定自启动常需权衡系统权限与启动时机。常见方案包括利用标准安卓广播、将应用预置为系统应用,或通过底层init.rc脚本直接启动。其中,涉及SELinux策略配置与系统签名等关键环节,是保障方案稳定性的基础。本文聚焦RK3588平台,深入探

anheku1562的博客 467

基于android2.3.5系统:开天辟地Android启动机制[一]

在android的系统中init程序是第一个运行的程序,这是一个守护进程,而具体的代码在android2.3.5的源码中,位于system/core/init/init.c文档中,这个是main函数的入口,也是android启动机制的入口。

嵌入式与人工智能天地 4440

RK3588安卓开机自启动:从广播接收到系统服务的完整方案

在嵌入式安卓系统开发中,开机自启动是保障设备功能可靠性的基础需求。其核心原理在于理解安卓系统的启动流程,特别是从Init进程到System Server的初始化顺序,以及关键的ACTION_BOOT_COMPLETED广播发送机制。这一机制的技术价值在于为应用提供了系统就绪后的启动入口,但其在Android 8.0后引入了“应用需至少启动一次”的限制,对RK3588这类常用于商显、工业HMI的无头设备构成了挑战。因此,实现稳定自启动需要综合运用多种技术方案。从基础的静态广播接收器,到监听网络变化的迂回启动,

dianchamian8747的博客 411

Android init.rc语言全解析

读懂init语言并不难,难的是有人愿意去做这个事情然后分享出来,如果不是接触到这块的知识,没有谁会专门研究这个,这也是为什么我写第一篇initrc文章到现在过去了7年多了一直没更新的原因,经常有小伙伴私信我希望我写一篇关于init文件解读的文章,或者是想请教下如何在custom的rc文件中加入自己的服务,当然有心的人肯定自己已经整明白了,因为所有的知识都是现存的,用心的小伙伴都能在网上找到。还没整明白的小伙伴也没关系,看完这篇文章你也可以摸索着自己做实现了。

zhonglunshun的专栏 1014

ADS1299寄存器配置与应用实战指南

本文提供了ADS1299高精度生物电信号采集芯片的寄存器配置与应用实战指南。详细解析了采样率、增益、转换模式等核心寄存器的设置方法,并分享了数据读取、高级功能配置及常见问题的调试心得,帮助开发者快速掌握ADS1299的配置技巧,实现稳定的ECG/EEG信号采集。

weixin_28278377的博客 194

应急响应之windows日志分析工具logparser使用

windows日志分析工具logparser使用介绍

u013930899的博客 8123

ENVI学习总结(十二)——基于改进的 CASA 模型反演 NPP

基于改进的 CASA 模型反演 NPP 数据为地理空间数据云提供的 TM 影像,其具体信息如图 1 所示。该实验中所使用的 TM 数据已进行过 QUAC 快速大气校正,来消除大气和光照等因素对地物反射的影响。Landsat 主题成像仪(TM)是 Landsat4 和 Landsat5 携带的传感器,每 16 天扫描同一地区,即 16 天覆盖全球一次。 TM 影像包含 7 个波段,波段 1-5 ...

Arcgiser的博客 3万+

顺序功能图基本结构

顺序功能图(Sequential Function Chart,SFC)是一种用于描述工业控制系统中顺序控制流程的图形化编程语言,广泛应用于PLC(可编程逻辑控制器)编程。其核心思想是将复杂的控制流程分解为多个有序的步骤,通过逻辑条件实现步骤间的切换。顺序功能图通过图形化的方式简化了复杂控制逻辑的设计,尤其适用于需要严格顺序控制的工业自动化场景。[初始步] → 转换条件1 → [步1] → 转换条件2 → [步2] → ...[步X] → → [步B] → 转换条件B → → [合并步]

ayingqin1的博客 1224

SAP ABAP BADI_FINS_ACDOC_POSTING_EVENTS 深度应用:KO88工单结算的凭证字段定制与财务数据增强

本文深入探讨了SAP ABAP中BADI_FINS_ACDOC_POSTING_EVENTS在KO88工单结算中的应用,详细解析了如何通过BADI实现财务凭证字段的定制与数据增强。文章提供了从结构扩展到BADI方法实现的完整步骤,包括性能优化建议和实际应用中的测试验证流程,帮助开发人员高效解决企业个性化财务需求。

weixin_26869081的博客 389

WINCC8.1工业组态软件安装与授权配置指南

SCADA系统作为工业自动化控制的核心平台,通过实时数据采集与监控实现生产流程可视化。WINCC作为西门子旗舰级组态软件,其8.1版本凭借稳定的运行时环境在汽车制造、流程工业等领域广泛应用。本文从工业控制系统软件安装规范切入,重点解析WINCC8.1与Automation License Manager的协同工作原理,详细说明包括系统环境检查、安装包校验、授权文件配置等关键技术环节。针对工程实施中常见的内存配置不足、授权管理器报错等典型问题,提供经过现场验证的解决方案,特别适用于需要进行产线监控系统升级维护

cqwf95925的博客 1651

C# WinForms 多语种切换实现:打造国际化应用程序

合理实现多语种切换功能可以显著提升应用程序的国际化水平。模块化设计:将本地化逻辑模块化,便于管理和维护。异常处理:始终捕获和处理可能的异常,确保程序的健壮性。资源管理:合理管理资源文件,避免重复和遗漏。测试:在不同语言环境下进行全面测试,确保所有字符串都能正确显示。文档和注释:为关键代码添加详细的文档和注释,便于后续维护。

墨夶的博客 1691

Altium Designer 超详细入门教程

本文是一份Altium Designer新手入门教程,详细介绍了从软件基础到PCB制版的全流程。主要内容包括:软件界面介绍与工程创建方法;原理图设计中的元件放置、电气连线、标注添加等操作;PCB设计的布局布线、铺铜和DRC检查;Gerber和钻孔文件的导出方法。教程还提供了分类整理的实用快捷键表和新手避坑指南,强调原理图编译和DRC检查的重要性。通过本教程,新手可以快速掌握AD基本操作,完成简单电路板的设计与制版文件导出。

学习中...... 821

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: android学习笔记 匿名Binder
下一篇: android webkit学习笔记1---url的load过程
有梦想的胖子
博客等级 码龄16年 51粉丝 26原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值