快速掌握Android init.rc配置,启动脚本轻松集成

快速掌握Android init.rc配置,启动脚本轻松集成

1. 引言:为何需要自定义开机启动脚本

在Android系统开发中,尤其是在定制ROM、设备初始化或嵌入式场景下,经常需要在系统启动过程中执行一些特定的初始化操作。这些操作可能包括设置系统属性、挂载特殊分区、启动守护进程或调试硬件状态等。

虽然可以通过应用层的BroadcastReceiver监听BOOT_COMPLETED广播来实现部分功能,但这种方式存在明显延迟——必须等待整个Zygote和System Server启动完成。对于需要早期介入系统启动流程的任务,必须依赖更底层的机制:init.rc脚本。

本文将详细介绍如何通过修改init.rc配置文件,在Android 8.0及以上系统中安全、可靠地集成自定义开机启动脚本,并涵盖SELinux权限配置的关键步骤,帮助开发者避免常见陷阱。

2. 核心概念解析:init.rc与Android Init语言

2.1 什么是init.rc?

init.rc是Android系统中由init进程读取的第一个脚本文件,位于根文件系统的/init.rc路径。它是用Android Init语言编写的文本文件,用于定义:

  • 系统服务(service)
  • 动作触发器(on action)
  • 环境变量设置(export)
  • 权限配置(chown, chmod)
  • 文件挂载(mount)

init进程是Android系统中所有用户空间进程的祖先(PID=1),它负责解析并执行init.rc中的指令,从而拉起关键系统服务。

2.2 Init语言的基本结构

Init语言主要包含以下几类语句:

on <trigger> # 定义动作触发条件 <command> # 执行命令列表 service <name> <path> # 定义一个服务 <option> # 服务选项(用户、组、seclabel等)

例如,一个典型的开机启动服务定义如下:

service my_startup /system/bin/my_script.sh class main user root group root oneshot seclabel u:object_r:my_script_exec:s0

其中:

  • class main表示该服务属于主启动类
  • oneshot表示只运行一次,不重启
  • seclabel指定SELinux安全上下文

3. 实现步骤详解:从脚本编写到系统集成

3.1 编写可执行Shell脚本

首先创建你的启动脚本,建议命名为init.test.sh,存放于device/<company>/<target>/root/system/bin/或统一管理目录中。

#!/system/bin/sh # # init.test.sh - 测试开机启动脚本 # # 设置测试属性,便于验证脚本是否执行 setprop test.boot.script.executed 1 # 输出日志到dmesg(可用于调试) log -t "InitScript" -p i "Test startup script is running" # 可选:创建标记文件(注意权限问题) # touch /data/local/tmp/boot_script_done # 示例:检查某个节点是否存在 if [ -e "/sys/class/leds/blue/brightness" ]; then echo 1 > /sys/class/leds/blue/brightness fi

重要提示:脚本首行必须为#!/system/bin/sh,不能使用/bin/sh,否则在Android系统中无法正确解析。

构建完成后,该脚本应被打包进system.img,最终位于/system/bin/init.test.sh

3.2 将脚本添加到系统镜像

在设备的Android.mkBoardConfig.mk中确保脚本被正确打包:

# Android.mk 示例 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := init.test.sh LOCAL_SRC_FILES := root/system/bin/init.test.sh LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)/system/bin include $(BUILD_PREBUILT)

或者使用PRODUCT_COPY_FILES方式:

PRODUCT_COPY_FILES += \ device/example/target/root/system/bin/init.test.sh:system/bin/init.test.sh

3.3 在init.rc中注册服务

不建议直接修改顶层init.rc,而应在设备专属的init.<target>.rc文件中添加服务定义,如init.target.rc

# service name path [arg1] [arg2] ... service test_startup /system/bin/init.test.sh class main user root group root oneshot disabled # 先禁用,通过trigger手动启动 seclabel u:object_r:test_startup_exec:s0 # 触发器:在boot-complete阶段执行 on property:sys.boot_completed=1 start test_startup

说明:

  • disabled防止自动启动,配合start命令控制时机
  • on property:sys.boot_completed=1确保在系统完全启动后运行
  • 若需更早执行,可使用on early-initon initon fs等阶段

3.4 SELinux策略配置(te文件)

由于Android启用了SELinux强制模式,任何新服务都必须声明其安全上下文。

创建.te策略文件

在设备SELinux策略目录下新建test_startup.te(如device/<company>/<target>/sepolicy/test_startup.te):

# 定义类型 type test_startup, coredomain; # 定义可执行文件类型 type test_startup_exec, exec_type, file_type; # 允许init域转换到该域 init_daemon_domain(test_startup) # 可选:允许shell域访问(用于调试) # allow shell test_startup_exec:file { read open getattr execute };
注册文件上下文

file_contexts文件中绑定文件路径与SELinux标签:

# device/<company>/<target>/sepolicy/file_contexts /system/bin/init\.test\.sh u:object_r:test_startup_exec:s0
编译策略

确保.te文件被纳入编译系统,通常在sepolicy/Android.mkBOARD_SEPOLICY_DIRS中引用:

BOARD_SEPOLICY_DIRS += \ device/example/target/sepolicy

3.5 调试与验证方法

方法一:查看属性是否设置
adb shell getprop test.boot.script.executed # 输出 1 表示脚本已执行
方法二:查看内核日志
adb logcat -b kernel | grep "InitScript"
方法三:检查服务状态
adb shell dumpsys activity services test_startup
方法四:使用dmesg观察init输出
adb shell dmesg | grep init

若出现类似starting service 'test_startup'...日志,则表示服务已被触发。

4. 常见问题与解决方案

4.1 脚本未执行的可能原因

问题排查方法解决方案
SELinux拒绝dmesg | grep avc添加对应allow规则
路径错误ls /system/bin/init.test.sh确认文件存在且权限为755
Shebang错误file /system/bin/init.test.sh修改为#!/system/bin/sh
服务未启动dumpsys init | grep test_startup检查trigger是否满足

4.2 SELinux权限不足典型报错

avc: denied { execute } for name="init.test.sh" dev="sdaXX" ino=XXXX

解决方法是在.te文件中添加相应权限:

# 如果需要访问特定目录 allow test_startup system_file:dir search; allow test_startup system_prop:file read; # 如果需要写文件 allow test_startup data_file:file write;

可借助audit2allow工具自动生成规则:

adb pull /proc/kmsg kmsg.log grep avc kmsg.log | audit2allow

4.3 启动时机选择建议

需求场景推荐trigger说明
修改系统属性on init早期设置
操作/sys节点on fs文件系统挂载后
依赖Zygote服务on property:sys.boot_completed=1系统完全启动后
网络相关操作on property:net.eth0.got_ip=1获取IP后执行

5. 最佳实践与工程建议

5.1 安全性建议

  • 最小权限原则:仅授予脚本必需的SELinux权限
  • 避免硬编码路径:使用环境变量或系统属性
  • 日志脱敏:避免在log中输出敏感信息
  • 失败处理:添加错误判断和退出码
if ! touch /data/misc/test.flag; then log -t "InitScript" -p w "Failed to create flag file" exit 1 fi

5.2 可维护性优化

  • 使用统一前缀命名服务(如svc_test_*
  • 将多个小任务合并为单一服务,减少init负担
  • 提供开关属性控制启用状态:
on property:test.startup.enabled=1 && property:sys.boot_completed=1 start test_startup

5.3 多版本兼容性考虑

不同Android版本init行为略有差异:

  • Android 8.0+:Treble架构,vendor和system分离
  • Android 10+:Stronger SELinux,默认deny未知domain
  • Android 12+:More restricted init context

建议在BoardConfig.mk中通过宏控制:

ifeq ($(TARGET_USES_TEST_INIT),true) PRODUCT_COPY_FILES += \ device/example/target/init.test.sh:system/bin/init.test.sh endif

6. 总结

通过本文的系统化梳理,我们完成了从零开始集成Android开机启动脚本的完整闭环:

  1. 脚本编写:确保语法正确、路径合规;
  2. 系统集成:通过PRODUCT_COPY_FILES打包进镜像;
  3. 服务注册:在init.<target>.rc中定义service;
  4. SELinux配置:编写.te策略并绑定file_contexts
  5. 调试验证:利用属性、日志和dumpsys确认执行效果。

这套方法已在Android 8.0至Android 13多个版本上验证有效,适用于高通、MTK、瑞芯微等主流平台。

掌握init.rc的配置不仅有助于实现开机自动化任务,更是深入理解Android系统启动流程的关键一步。合理运用这一机制,可以显著提升系统级定制能力。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

必收藏!RAG与Agentic RAG全解析:从基础到进阶,解锁大模型实用能力

在大模型应用落地过程中&#xff0c;“AI幻觉”和静态知识局限一直是困扰开发者的核心问题。检索增强生成&#xff08;RAG&#xff09;技术的出现&#xff0c;为解决这两大痛点提供了高效方案&#xff0c;而其进化版代理式检索增强生成&#xff08;Agentic RAG&#xff09;&…

2026年挂具脱漆炉推荐:鱼台光华环保科技挂具脱漆炉设备/原理/报价/定制全解析

在工业涂装与表面处理领域,挂具脱漆炉作为关键设备,直接影响着生产效率与环保水平。据行业统计,2025年国内挂具脱漆设备市场规模已突破12亿元,年复合增长率达8.7%,其中环保型设备占比超65%。在众多设备供应商中,…

vLLM部署HY-MT1.5-7B指南|高性能翻译模型落地实践

vLLM部署HY-MT1.5-7B指南&#xff5c;高性能翻译模型落地实践 在多语言信息处理日益成为刚需的今天&#xff0c;高质量、低延迟的机器翻译能力已成为数据科学家、AI工程师和跨国业务团队的核心工具。尤其在涉及少数民族语言、混合语种文本或专业术语场景下&#xff0c;通用翻译…

腾讯云TI-ONE平台部署图片旋转判断模型指南

腾讯云TI-ONE平台部署图片旋转判断模型指南 1. 引言 1.1 图片旋转判断的技术背景 在图像处理与计算机视觉的实际应用中&#xff0c;图片的方向问题是一个常见但不可忽视的挑战。尤其是在移动端用户上传、扫描文档识别、OCR文本提取等场景中&#xff0c;图片可能以任意角度拍…

DeepSeek-R1-Distill-Qwen-1.5B部署省50%成本?真实案例分享

DeepSeek-R1-Distill-Qwen-1.5B部署省50%成本&#xff1f;真实案例分享 1. 背景与选型动机 在当前大模型快速迭代的背景下&#xff0c;越来越多企业与开发者面临一个现实问题&#xff1a;如何在有限算力资源下实现高性能推理能力。尤其是在边缘设备、嵌入式平台或低成本服务器…

ADAS软件开发

ADAS&#xff08;Advanced Driver Assistance Systems&#xff0c;高级驾驶辅助系统&#xff09;软件开发是一个融合了计算机视觉、传感器融合、控制算法、嵌入式系统和人工智能等多领域技术的复杂工程。以下是ADAS软件开发的关键组成部分、开发流程和技术栈概览&#xff1a;一…

服务CPU突然飙到100%,用Arthas三分钟定位到问题代码

前言 那天下午正准备摸鱼&#xff0c;突然收到告警&#xff1a;生产环境某服务CPU使用率100%。 打开监控一看&#xff0c;好家伙&#xff0c;4核全部打满&#xff0c;而且已经持续了好几分钟。赶紧上服务器排查。 第一步&#xff1a;确认是哪个进程 先用top看一眼&#xff…

2026年热门的/有实力的/质量好的/正规的/高品质的蒸发器厂家权威推荐榜:聚焦节能、高粘度处理与工业废水净化

在化工、制药、食品、环保等诸多工业领域,蒸发器作为核心的浓缩、结晶与分离设备,其性能的优劣直接关系到生产线的效率、能耗与最终产品质量。市场上供应商众多,产品描述琳琅满目,如何从“优质蒸发器”、“专业蒸发…

高精地图车端引擎开发

1.高精地图车端引擎开发 高精地图车端引擎开发是智能驾驶系统中的核心技术之一&#xff0c;主要负责在车辆端高效加载、解析、管理和使用高精地图数据&#xff0c;为感知、定位、规划与控制等模块提供精准的地理空间信息支撑。以下是高精地图车端引擎开发的关键要素和技术要点…

2026年起重电磁铁厂家推荐:山磁智能科技有限公司,正面吊/吊运管坯用/吊运捆扎棒材用/吊运钢管用/吊运中厚钢板坯用/吊运方坏用起重电磁铁全系供应

山磁智能科技(上海)有限公司是一家深耕磁力应用技术研发与制造领域十余年的高科技企业,凭借强大的技术实力与规模化生产能力,成为全球制造业客户信赖的合作伙伴。公司现有现代化厂区110亩,配备精大稀设备140余台,年…

压路机远程监控智慧运维系统解决方案

压路机作为道路建设、机场跑道、水利工程等基础设施建设领域的关键压实设备&#xff0c;其压实均匀性、作业效率、运行可靠性直接影响路基密实度、路面平整度及工程整体质量&#xff0c;是保障施工进度与工程质量的核心装备。传统模式下&#xff0c;压路机多为单机分散作业&…

2026年广州财税记账公司推荐榜:财税公司 /财税代理/ 财税服务 /外包财税 /财税外包 /财税服务外包/ 财税外包公司服务精选

在粤港澳大湾区建设不断深化的背景下,广州作为核心引擎,其市场主体活力持续迸发,对专业、规范的财税服务需求也随之迅猛增长。对于广大中小企业而言,一个可靠的财税合作伙伴不仅是记账报税的助手,更是规避税务风险…

小白指南:elasticsearch安装+Kibana日志展示

从零开始搭建日志分析平台&#xff1a;Elasticsearch Kibana 实战指南 你有没有遇到过这样的场景&#xff1f;线上服务突然报错&#xff0c;几十台服务器的日志散落在各处&#xff0c; tail -f 查到眼花也找不到根源&#xff1b;或者用户反馈某个功能异常&#xff0c;却没人…

2026年资产管理系统软件清单:大型集团+不动产管理优质选择 - 品牌2026

数字化转型进入深水区,大型集团与不动产企业面临资产规模扩容、业态多元叠加、跨域协同加剧等挑战,对资产管理系统的标准化适配、定制化能力、数据安全性及智能化水平提出更高要求。一套优质的资产管理系统,已成为企…

看效果说话:通义千问3-4B生成的80万字长文展示

看效果说话&#xff1a;通义千问3-4B生成的80万字长文展示 1. 引言&#xff1a;小模型也能写“巨著”&#xff1f; 在大模型参数动辄上百亿、千亿的今天&#xff0c;一个仅40亿参数的小模型能否承担起生成超长文本的重任&#xff1f;通义千问3-4B-Instruct-2507给出了肯定答案…

UDS 31服务安全访问机制深度剖析:全面讲解

UDS 31服务安全访问机制深度剖析&#xff1a;从原理到实战的完整指南在一辆现代智能汽车中&#xff0c;诊断接口不仅是维修工具的“入口”&#xff0c;更可能成为黑客攻击的“后门”。随着车辆电子架构日益复杂&#xff0c;如何在开放诊断功能的同时守住安全底线&#xff1f;UD…

2026年北京继承遗嘱纠纷律师服务推荐:合同纠纷 /交通事故纠纷 /房屋买卖纠纷/ 民间借贷纠纷/ 民事离婚纠纷/ 劳动工伤纠纷律师精选

在处理家庭财产传承这一核心事务时,继承与遗嘱纠纷往往涉及复杂的情感纠葛和精密的财产分割,因此寻求专业法律支持至关重要。这类案件不仅考验法律从业者对《民法典》继承编的深刻理解,更考验其沟通谈判、证据梳理乃…

SerialPort入门配置:Linux系统下权限设置操作指南

打通软硬桥梁&#xff1a;Linux下串口权限配置实战全解析 你有没有遇到过这样的场景&#xff1f;精心写好的串行通信程序&#xff0c;烧录到树莓派或工控机上&#xff0c;运行时却报错&#xff1a; Permission denied: could not open port /dev/ttyUSB0明明代码没问题&#…

2026年苏州婚纱摄影机构推荐榜:姑苏区星纳摄影店,苏州婚纱摄影工作室/苏州婚纱摄影拍摄基地/苏州婚纱摄影礼服/苏州婚纱摄影拍摄机构精选

苏州婚纱摄影市场规模已突破15亿元,每年超过20万对新人选择在这座江南古城记录人生重要时刻。苏州婚纱摄影市场正蓬勃发展,数据显示其市场规模已突破15亿元。新人选择婚纱摄影机构时,通常关注苏州婚纱摄影机构的整体…

GIF动图一键录制,只有1M大小,高帧率丝滑效果,使用完全免费!

下载链接 https://pan.freedw.com/s/57wrU8 软件介绍 GIF动图一键录制&#xff0c;只有1M大小&#xff0c;高帧率丝滑效果&#xff0c;使用完全免费&#xff01; 软件特点 高帧率录制&#xff0c;丝滑效果 体积小巧&#xff0c;不占用内存 一键开启录制&#xff0c;操作简…