android .rc文件

Android .rc 文件的用途

在 Android 系统中,.rc 文件主要是 init 脚本,用于定义和配置 Android 系统的启动过程。.rc 文件的扩展名通常为 .rc,例如 init.rcinit.vendor.rcinit.hardware.rc 等。这些文件是 Android 的 init 进程(系统的第一个用户态进程)读取和解析的脚本,它们控制系统服务、设备驱动程序、属性初始化等内容。


主要用途

.rc 文件的主要用途可以总结为以下几点:

  1. 启动服务

    • 定义系统级服务(如 surfaceflingerzygote 等)的启动条件、启动方式以及依赖关系。
  2. 挂载文件系统

    • 挂载必要的文件系统(如 /system/data/vendor 等),确保操作系统能够正常运行。
  3. 设置系统属性

    • 初始化和设置系统属性(如 ro. 开头的只读属性和 persist. 开头的可持久化属性)。
  4. 权限管理

    • 设置文件、设备节点的权限,确保系统安全。
  5. 加载驱动程序

    • 加载特定的内核模块或设备驱动程序。
  6. 事件触发

    • 定义某些条件(如属性变化、文件出现)下的事件处理逻辑。

.rc 文件的结构

一个 .rc 文件通常由以下几部分组成:

  1. 命令部分

    • 命令通常用于设置属性、挂载文件系统、启动服务等。
  2. 服务定义部分

    • 定义服务的启动行为、路径和属性。
  3. 触发器部分

    • 定义在特定事件发生时执行的操作。

常见的 .rc 文件语法和示例

1. 属性设置

使用 setprop 设置系统属性。

setprop ro.debuggable 1
setprop persist.sys.usb.config adb
2. 挂载文件系统

使用 mount 挂载文件系统。

mount ext4 /dev/block/platform/soc/1da4000.ufshc/by-name/system /system ro
mount ext4 /dev/block/platform/soc/1da4000.ufshc/by-name/data /data nosuid nodev noatime
3. 启动服务

定义服务的启动方式。

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
    class main
    user root
    group system readproc
    onrestart restart zygote_secondary

说明:

  • service:关键字,用于定义服务。
  • class:指定服务所属的类,服务可以根据类被统一启动或停止。
  • user:指定服务运行的用户。
  • group:指定服务运行的用户组。
  • onrestart:定义服务重启时执行的操作。
4. 触发器

触发器定义系统在特定条件下执行的操作。

on post-fs-data
    mkdir /data/misc/my_service 0770 system system
    chmod 0700 /data/misc/my_service

说明:

  • on post-fs-data:触发器,表示在文件系统初始化完成后执行。
  • mkdirchmod:用于创建目录并设置权限。

常见的 .rc 文件

以下是 Android 系统中常见的 .rc 文件及其用途:

  1. init.rc

    • 系统主配置文件,定义了系统服务、属性、挂载点等全局配置。
  2. init.hardware.rc(例如 init.qcom.rc):

    • 硬件相关的配置文件,包含特定芯片或设备的初始化逻辑。
  3. init.vendor.rc

    • 定义供应商相关的服务、属性和其他配置。
  4. init.usb.rc

    • 定义 USB 子系统的初始化和配置。
  5. init.recovery.rc

    • 定义 Recovery 模式下的服务和行为。

示例:init.rc

以下是一个简化的 init.rc 示例,展示了典型的 .rc 文件内容:

# 定义系统属性
on early-init
    setprop ro.boot.hardware qcom
    setprop ro.debuggable 1

# 挂载文件系统
on init
    mount ext4 /dev/block/platform/soc/1da4000.ufshc/by-name/system /system ro
    mount ext4 /dev/block/platform/soc/1da4000.ufshc/by-name/data /data nosuid nodev noatime

# 启动服务
service surfaceflinger /system/bin/surfaceflinger
    class main
    user system
    group graphics
    disabled
    oneshot

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
    class main
    user root
    group system
    onrestart restart zygote_secondary

# 触发器
on property:sys.boot_completed=1
    start my_custom_service

总结

.rc 文件是 Android 系统启动过程中的核心配置文件,用于定义系统服务、挂载点、属性和事件触发器。它们由 init 进程解析并执行,是 Android 平台启动时不可或缺的一部分。通过合理配置 .rc 文件,可以定制系统的启动行为和服务管理逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/982071.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Excel的行高、列宽单位不统一?还是LaTeX靠谱

想要生成田字格、米字格、带拼音标准,方便小学生书法和练字。Word,Excel之类所见即所得是最容易相当的方式。但它们处理带田字格之类背景时,如果没有专用模板、奇奇怪怪的插件,使用起来会碰到各种问题。比如,Word里面用…

C++学习之路,从0到精通的征途:入门基础

目录 一.C的第一个程序 二.命名空间 1.namespace的价值 2.命名空间的定义 3.命名空间使用 三.C的输入与输出 1.<iostream> 2.流 3.std(standard) 四.缺省参数 1.缺省参数的定义 2.全缺省/半缺省 3.声明与定义 ​五.函数重载 1.参数个数不同 2.参数类型不…

rust学习笔记12-hashmap与1. 两数之和

rust集合中也有hashmap&#xff0c;昨天已经提到过&#xff0c;学过java同学再熟悉不过了&#xff0c;一道经典面试题问hashmap在java1.8的实现原理&#xff0c;数组哈希表红黑树&#xff0c;rust中hashmap在功能上和java一样&#xff0c;但实现上有很大差别&#xff0c;它的基…

通过多线程同时获取H264和H265码流

目录 一.RV1126 VI采集摄像头数据并同时编码H264、H265的大概流程​编辑​编辑 1.1初始化VI模块&#xff1a; 1.2H264、H265的VENC模块初始化&#xff1a; 1.3VI分别绑定H264的VENC层和H265的VENC层&#xff1a; ​​​​​​​1.4开启H264线程采集H264的VENC数据&#xff…

SpringBoot为什么要禁止循环依赖?

大家好&#xff0c;我是锋哥。今天分享关于【SpringBoot为什么要禁止循环依赖?】面试题。希望对大家有帮助&#xff1b; SpringBoot为什么要禁止循环依赖? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Boot 和 Spring 框架之所以要避免循环依赖&#xf…

The Rust Programming Language 学习 (三)

所有权 所有权&#xff08;系统&#xff09;是 Rust 最为与众不同的特性&#xff0c;它让 Rust 无需垃圾回收器&#xff08;garbage collector&#xff09;即可保证内存安全。因此&#xff0c;理解 Rust 中所有权的运作方式非常重要。 这里是非常重非常重的一个知识点,这里一…

基于物联网技术的电动车防盗系统设计(论文+源码)

1总体设计 本课题为基于物联网技术的电动车防盗系统&#xff0c;在此将整个系统架构设计如图2.1所示&#xff0c;其采用STM32F103单片机为控制器&#xff0c;通过NEO-6M实现GPS定位功能&#xff0c;通过红外传感器检测电瓶是否离开位&#xff0c;通过Air202 NBIOT模块将当前的数…

雷池WAF的为什么选择基于Docker

Docker 是一种开源的容器化平台&#xff0c;可以帮助开发人员将应用程序及其所有依赖项打包到一个称为容器的独立、可移植的环境中。Docker 的核心概念包括以下几点&#xff1a; 容器&#xff1a;Docker 使用容器来封装应用程序及其依赖项&#xff0c;使其能够在任何环境中都能…

解决docker认证问题 failed to authorize: failed to fetch oauth token

报错信息[bash1]解决方案 全局代理打开“buildkit”: false &#xff0c;见[图1] [bash1] >docker build -t ffpg . [] Building 71.8s (3/3) FINISHED docker:desktop-linux> [internal] load bui…

LINUX网络基础 [一] - 初识网络,理解网络协议

目录 前言 一. 计算机网络背景 1.1 发展历程 1.1.1 独立模式 1.1.2 网络互联 1.1.3 局域网LAN 1.1.4 广域网WAN 1.2 总结 二. "协议" 2.1 什么是协议 2.2 网络协议的理解 2.3 网络协议的分层结构 三. OSI七层模型&#xff08;理论标准&#xff09; …

【Docker】容器安全之非root用户运行

【Docker】容器安全之非root用户运行 1. 场景2. 原 Dockerfile 内容3. 整改结果4. 非 root 用户带来的潜在问题4.1 文件夹读写权限异常4.2 验证文件夹权限 1. 场景 最近有个项目要交付&#xff0c;第三方测试对项目源码扫描后发现一个问题&#xff0c;服务的 Dockerfile 都未指…

亚马逊云科技Marketplace(中国区)上架专业服务产品, “云生态连接器”价值凸显

近日&#xff0c;由西云数据运营的亚马逊云科技Marketplace&#xff08;中国区&#xff09;正式支持专业服务产品。此次发布将大幅简化企业对云专业服务的采购流程&#xff0c;实现云软件从规划、部署到支持的全生命周期管理&#xff0c;同时也为合作伙伴提供了更多的销售机会。…

鸿蒙启动页开发

鸿蒙启动页开发 1.1 更改应用名称和图标 1.更改应用图标 找到moudle.json5文件&#xff0c;找到应用启动的EntryAbility下面的icon,将原来的图标改成自己设置的即可 2.更改应用名称 3.效果展示 2.1 广告页面开发 3.1 详细介绍 3.1.1 启动页面 import { PrivacyDialog } fr…

HCIA—IP路由静态

一、概念及作用 1、概念&#xff1a;IP路由是指在IP网络中&#xff0c;数据从源节点到目的节点所经过的路径选择和数据转发的过程。 2、作用 ①实现网络互联&#xff1a;使不同网段的设备能够相互通信&#xff0c;构建大规模的互联网络 ②优化网络拓扑&#xff1a;根据网络…

【计算机网络入门】初学计算机网络(十一)重要

目录 1. CIDR无分类编址 1.1 CIDR的子网划分 1.1.1 定长子网划分 1.1.2 变长子网划分 2. 路由聚合 2.1 最长前缀匹配原则 3. 网络地址转换NAT 3.1 端口号 3.2 IP地址不够用&#xff1f; 3.3 公网IP和内网IP 3.4 NAT作用 4. ARP协议 4.1 如何利用IP地址找到MAC地址…

机器视觉开发教程——封装Halcon通用模板匹配工具【含免费教程源码】

目录 引言前期准备Step1 设计可序列化的输入输出集合【不支持多线程】Step2 设计程序框架1、抽象层【IProcess】2、父类【HAlgorithm】3、子类【HFindModelTool】 Step3 设计UI结果展示 引言 通过仿照VisionPro软件二次开发Halcon的模板匹配工具&#xff0c;便于在客户端软件中…

【Linux跬步积累】—— 线程池详解(有源代码)

文章目录 一、如何实现一个线程1、基本结构2、实现成员函数3、演示4、代码总汇Thread.hppMain.cc 二、如何封装线程池1、设计成员变量2、构造函数与析构函数3、初始化4、启动与回收5、主线程放入任务6、子线程读取任务7、终止线程池 三、测试四、线程池总代码1、ThreadPool.hpp…

【Linux】自定协议和序列化与反序列化

目录 一、序列化与反序列化概念 二、自定协议实现一个加法网络计算器 &#xff08;一&#xff09;TCP如何保证接收方的接收到数据是完整性呢&#xff1f; &#xff08;二&#xff09;自定义协议 &#xff08;三&#xff09;自定义协议的实现 1、基础类 2、序列化与反序列…

hive之LEAD 函数详解

1. 函数概述 LEAD 是 Hive 中的窗口函数&#xff0c;用于获取当前行之后指定偏移量处的行的值。常用于分析时间序列数据、计算相邻记录的差异或预测趋势。 2. 语法 LEAD(column, offset, default) OVER ([PARTITION BY partition_column] [ORDER BY order_column [ASC|DESC]…

ZYNQ-PL学习实践(二)按键和定时器控制LED闪烁灯

ZYNQ-PL学习实践&#xff08;二&#xff09;按键和定时器控制LED闪烁灯&#xff09; 1 创建工程2 verilog 代码3 约束4 综合5 生成bit总结 1 创建工程 2 verilog 代码 添加key_led.v 文件&#xff0c; module key_led(input sys_clk , //系统时钟50MHzinput …