MTK芯片平台开机脚本适配,non_plat策略添加

MTK芯片平台开机脚本适配,non_plat策略添加

1. 引言

在嵌入式Android系统开发中,实现自定义功能的开机自动执行是一项常见需求。尤其是在MTK(联发科)芯片平台上进行定制化开发时,往往需要通过添加开机启动脚本完成硬件初始化、服务拉起或调试信息设置等任务。

然而,仅仅编写一个Shell脚本并放入系统并不足以确保其在开机阶段被正确执行。由于Android系统的安全机制(特别是SELinux策略),若未正确配置权限和上下文,脚本将无法运行甚至导致系统启动异常。

本文基于实际工程经验,详细介绍如何在MTK平台Android 8.0及以上版本中,通过non_plat策略方式安全地添加开机启动脚本,涵盖脚本编写、init.rc配置、SELinux策略定义与te文件管理等关键步骤,帮助开发者规避常见陷阱,提升适配效率。

2. 开机启动脚本的核心流程

2.1 整体实现路径

要在MTK平台上成功实现开机脚本启动,需遵循以下五个核心步骤:

  • 编写可执行的Shell脚本
  • 将脚本放置于系统指定目录(如/vendor/bin
  • init.<platform>.rc文件中注册服务
  • 定义SELinux类型与执行上下文
  • 添加non_plat域策略以允许执行

其中,non_plat策略的使用是MTK推荐的安全扩展方式,避免直接修改平台级sepolicy带来的兼容性问题。

2.2 环境前提说明

本文适用于以下环境条件:

  • 芯片平台:MTK(MediaTek)系列SoC
  • Android版本:Android 8.0 及以上(已启用SELinux enforcing模式)
  • 构建系统:AOSP源码编译环境
  • 权限要求:具备完整源码访问权限及build权限

注意:所有操作均应在源码环境下完成,不建议仅通过adb push方式进行测试,否则难以验证SELinux策略是否生效。

3. 实现步骤详解

3.1 编写开机启动Shell脚本

首先创建一个简单的Shell脚本用于测试,命名为init.test.sh,内容如下:

#!/system/bin/sh # 设置测试属性,便于验证脚本是否执行 setprop sys.boot.test_script executed # 输出日志到dmesg(可用于串口或logcat查看) log -t "InitTest" -p i "Test boot script is running" # 示例:可在此处添加其他初始化命令 # mkdir /data/test_dir # chmod 755 /data/test_dir
注意事项:
  • 脚本首行必须为#!/system/bin/sh#!/system/xbin/sh,不可使用/bin/sh
  • 建议先手动push至设备并chmod +x后执行,确认语法无误
  • 避免在脚本中创建复杂文件结构或涉及敏感路径操作,防止SELinux拒绝访问

将该脚本放入源码中的vendor/mediatek/proprietary/scripts/目录下,并在后续编译过程中将其打包进/vendor/bin/

3.2 将脚本集成到系统镜像

为了确保脚本随系统镜像一起烧录,需在Android.mk或Android.bp中声明安装规则。

假设使用Android.mk,可在对应模块中添加:

# Copy init.test.sh to vendor/bin include $(CLEAR_VARS) LOCAL_MODULE := init.test.sh LOCAL_SRC_FILES := $(LOCAL_PATH)/init.test.sh LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_EXECUTABLES) LOCAL_MODULE_TAGS := optional LOCAL_MODULE_OWNER := mtk include $(BUILD_PREBUILT)

这样,在编译完成后,脚本会被自动复制到/vendor/bin/init.test.sh

3.3 在init.rc中注册启动服务

MTK平台通常提供专用的init配置文件用于客户自定义服务,例如init.mt67xx.rc(具体名称依平台而定)。不建议直接修改根目录下的init.rc

device/mediatek/<platform>/rootdir/etc/init.mt67xx.rc中添加以下service定义:

service test_service /vendor/bin/init.test.sh class main user root group root oneshot disabled seclabel u:r:test_service:s0
参数解释:
  • class main:表示该服务属于主启动类,在boot触发时运行
  • user/group root:以root权限执行(根据需求可降权)
  • oneshot:只执行一次,适合初始化脚本
  • disabled:默认不启用,便于控制启动时机;可通过start test_service手动触发
  • seclabel:指定SELinux安全上下文,需与后续te文件一致

若希望开机自动运行,可去掉disabled,并在适当位置添加on property:sys.boot_completed=1 start test_service等触发条件。

3.4 创建SELinux策略文件(TE)

由于Android启用了SELinux强制模式,任何新进程都必须有明确的域(domain)和类型(type)定义,否则会被拒绝执行。

MTK平台推荐使用non_plat机制扩展SELinux策略,即在device/mediatek/sepolicy/basic/non_plat/下添加客户专属策略,避免污染原生plat策略。

步骤一:创建.te策略文件

新建文件device/mediatek/sepolicy/basic/non_plat/test_service.te,内容如下:

# 定义服务类型 type test_service, coredomain; # 定义可执行文件类型 type test_service_exec, exec_type, file_type, vendor_file_type; # 允许init域转换到test_service域 init_daemon_domain(test_service) # 可选:临时放宽策略用于调试(发布前务必移除) # permissive test_service;
步骤二:绑定文件上下文

编辑device/mediatek/sepolicy/basic/non_plat/file_contexts文件,添加以下行:

/vendor/bin/init\.test\.sh u:object_r:test_service_exec:s0

这表示:当系统加载/vendor/bin/init.test.sh时,应赋予它test_service_exec类型,从而允许init进程依据seclabel启动对应domain。

正则表达式注意:文件名中的点需转义为\.,否则匹配失败。

3.5 验证non_plat策略是否生效

MTK的non_plat机制依赖于编译系统自动合并策略。可通过以下方式验证:

  1. 检查最终生成的sepolicy文件:bash out/target/product/<product>/root/file_contexts.bin使用sefcontext工具反编译验证是否存在/vendor/bin/init.test.sh条目。

  2. 查看dmesg日志:bash adb shell dmesg | grep avc如果出现类似avc: denied { execute } for comm="init"的报错,则说明SELinux拦截了执行,需检查te文件配置。

  3. 使用ls -Z查看文件上下文:bash adb shell ls -Z /vendor/bin/init.test.sh正常输出应包含u:object_r:test_service_exec:s0

4. 常见问题与解决方案

4.1 脚本未执行但无明显错误

现象:系统正常启动,但getprop sys.boot.test_script为空,log中无相关输出。

排查方向: - 检查init.rc语法是否正确(缩进必须为空格,不能用tab) - 确认脚本是否真的存在于/vendor/bin/- 查看init日志:adb logcat -b init是否有starting service 'test_service'记录 - 若服务被标记为disabled,需显式调用start test_service

4.2 SELinux拒绝执行(AVC Denied)

典型日志

avc: denied { execute } for pid=1 comm="init" name="init.test.sh" dev="mmcblk0pXX" scontext=u:r:init:s0 tcontext=u:object_r:vendor_file:s0 tclass=file

解决方法: - 确保file_contexts中已正确声明文件类型映射 - 检查.te文件中是否定义了test_service_exec类型并关联exec_type- 使用permissive test_service;临时放行以便调试(仅限开发阶段)

4.3 脚本执行失败或中途退出

可能原因: - 脚本首行解释器路径错误(如写成/bin/sh) - 脚本缺少可执行权限(需在Android.mk中确保安装为可执行) - 脚本内部命令访问受限路径(如/system、/data等),触发SELinux deny

建议做法: - 在脚本开头加入log命令输出调试信息 - 使用ps | grep test_service确认进程是否短暂存在 - 利用串口日志获取更完整的启动过程信息

5. 最佳实践建议

5.1 使用non_plat策略的优势

  • 隔离性好:客户自定义策略与平台策略分离,便于维护和升级
  • 安全性高:避免误改核心sepolicy造成系统不稳定
  • 可移植性强:策略文件集中管理,易于迁移到其他项目

5.2 推荐的工程化组织方式

建议在项目中建立如下目录结构:

device/mediatek/<project>/ ├── rootdir/ │ └── etc/init.<project>.rc # 自定义init配置 ├── scripts/ │ └── init.test.sh # 启动脚本源码 └── sepolicy/ └── non_plat/ ├── test_service.te └── file_contexts # 或合并到主file_contexts

并通过统一的Android.mk或Android.bp进行构建集成。

5.3 调试技巧汇总

方法工具/命令用途
查看init日志adb logcat -b init观察服务启动时间点
检查SELinux拒绝adb shell dmesg \| grep avc发现权限拦截
验证文件上下文adb shell ls -Z <file>确认SELinux标签
手动触发服务adb shell start <service_name>快速测试脚本逻辑
输出调试日志log -t TAG -p i "msg"在脚本中插入跟踪点

获取更多AI镜像

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

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

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

相关文章

批量生成音频?GLM-TTS这个功能太实用了

批量生成音频&#xff1f;GLM-TTS这个功能太实用了 1. 引言&#xff1a;为什么需要批量语音合成&#xff1f; 在内容创作、有声书制作、智能客服训练以及多语言本地化等场景中&#xff0c;单一的文本转语音&#xff08;TTS&#xff09;已无法满足高效生产的需求。传统逐条合成…

Qwen2.5-0.5B保姆级教程:模型微调实战

Qwen2.5-0.5B保姆级教程&#xff1a;模型微调实战 1. 引言 1.1 学习目标 本文旨在为开发者提供一份完整的 Qwen2.5-0.5B-Instruct 模型微调实战指南&#xff0c;涵盖从环境搭建、数据准备、训练配置到本地部署的全流程。通过本教程&#xff0c;你将掌握&#xff1a; 如何在…

告别环境配置!YOLOv13镜像实现5秒快速推理

告别环境配置&#xff01;YOLOv13镜像实现5秒快速推理 在深度学习项目开发中&#xff0c;环境配置往往是阻碍效率的第一道“拦路虎”。Python版本冲突、CUDA驱动不匹配、依赖库缺失……这些问题不仅消耗大量时间&#xff0c;还可能导致模型训练中断或推理失败。尤其对于YOLO系…

GPEN照片增强ROI分析:投入GPU算力后的商业应用价值评估

GPEN照片增强ROI分析&#xff1a;投入GPU算力后的商业应用价值评估 1. 引言&#xff1a;图像修复技术的商业化演进路径 1.1 行业背景与技术需求 在数字内容爆发式增长的时代&#xff0c;高质量图像已成为社交媒体、电商展示、在线教育等领域的核心资产。然而&#xff0c;大量…

ComfyUI环境部署教程:低显存也能流畅运行的AI绘图方案

ComfyUI环境部署教程&#xff1a;低显存也能流畅运行的AI绘图方案 1. 引言 随着AI生成内容&#xff08;AIGC&#xff09;技术的快速发展&#xff0c;文本到图像生成模型如Stable Diffusion已成为创意设计、艺术创作和内容生产的重要工具。然而&#xff0c;传统图形界面工具在…

NewBie-image-Exp0.1技术解析:Jina CLIP在动漫生成中的作用

NewBie-image-Exp0.1技术解析&#xff1a;Jina CLIP在动漫生成中的作用 1. 技术背景与问题提出 近年来&#xff0c;基于扩散模型的图像生成技术在动漫内容创作领域取得了显著进展。然而&#xff0c;高质量、可控性强的多角色动漫图像生成仍面临诸多挑战&#xff0c;尤其是在语…

无需PS!用CV-UNet大模型镜像实现高精度自动抠图

无需PS&#xff01;用CV-UNet大模型镜像实现高精度自动抠图 1. 引言&#xff1a;AI抠图的工程化落地新选择 图像背景移除&#xff08;Image Matting&#xff09;作为计算机视觉中的经典任务&#xff0c;长期以来依赖专业设计工具如Photoshop完成。尽管传统方法在精细控制上表…

IQuest-Coder-V1-40B教程:领域特定语言(DSL)生成器

IQuest-Coder-V1-40B教程&#xff1a;领域特定语言(DSL)生成器 1. 引言 1.1 学习目标 本文旨在为开发者、AI研究员和软件工程实践者提供一份完整的IQuest-Coder-V1-40B模型使用指南&#xff0c;重点聚焦于如何利用该模型构建领域特定语言&#xff08;DSL&#xff09;生成器。…

Voice Sculptor语音合成实战:电子书朗读系统

Voice Sculptor语音合成实战&#xff1a;电子书朗读系统 1. 引言 随着人工智能技术的快速发展&#xff0c;语音合成&#xff08;Text-to-Speech, TTS&#xff09;已从简单的机械朗读演变为具备情感表达和风格化能力的智能语音生成系统。在众多应用场景中&#xff0c;电子书自…

ONNX模型导出成功!800x800尺寸适配多数场景

ONNX模型导出成功&#xff01;800x800尺寸适配多数场景 1. 引言&#xff1a;OCR文字检测的工程化落地需求 在实际工业与商业应用中&#xff0c;光学字符识别&#xff08;OCR&#xff09;技术被广泛用于文档数字化、票据处理、证件识别等场景。然而&#xff0c;训练完成的深度…

一键部署SAM3文本分割系统|高性能PyTorch环境配置详解

一键部署SAM3文本分割系统&#xff5c;高性能PyTorch环境配置详解 1. 技术背景与应用价值 图像分割作为计算机视觉的核心任务之一&#xff0c;正经历从专用模型向通用大模型的范式转变。传统方法依赖大量标注数据训练特定类别&#xff08;如行人、车辆&#xff09;的分割模型…

Qwen-Image-2512-ComfyUI成本控制:闲置资源自动释放策略

Qwen-Image-2512-ComfyUI成本控制&#xff1a;闲置资源自动释放策略 1. 背景与挑战&#xff1a;高算力模型的资源消耗痛点 随着生成式AI技术的快速发展&#xff0c;图像生成模型在分辨率、细节表现和推理速度方面持续提升。阿里开源的Qwen-Image-2512-ComfyUI作为最新一代高分…

GPEN部署问题汇总:初次运行run.sh时的典型报错解析

GPEN部署问题汇总&#xff1a;初次运行run.sh时的典型报错解析 1. 引言 1.1 背景与场景 GPEN&#xff08;Generative Prior ENhancement&#xff09;是一种基于生成先验的图像肖像增强技术&#xff0c;广泛应用于老照片修复、低质量人像优化等场景。其开源实现结合WebUI二次…

NotaGen音乐生成大模型实战|用LLM创作高质量符号化乐谱

NotaGen音乐生成大模型实战&#xff5c;用LLM创作高质量符号化乐谱 在AI生成内容&#xff08;AIGC&#xff09;快速发展的今天&#xff0c;文本、图像、视频等模态的生成技术已趋于成熟。然而&#xff0c;在音乐领域&#xff0c;尤其是符号化乐谱生成这一细分方向&#xff0c;…

Z-Image-Turbo性能评测:8步出图,推理速度超主流模型300%

Z-Image-Turbo性能评测&#xff1a;8步出图&#xff0c;推理速度超主流模型300% 1. 引言 1.1 技术背景与选型需求 近年来&#xff0c;AI图像生成技术迅速发展&#xff0c;Stable Diffusion系列模型成为文生图领域的主流方案。然而&#xff0c;尽管其图像质量出色&#xff0c…

AI手势识别完全本地运行:数据安全合规部署教程

AI手势识别完全本地运行&#xff1a;数据安全合规部署教程 1. 引言 1.1 学习目标 本文将详细介绍如何在本地环境中部署一个基于 MediaPipe Hands 模型的 AI 手势识别系统&#xff0c;实现从图像输入到手部关键点检测、再到“彩虹骨骼”可视化输出的完整流程。通过本教程&…

Qwen2.5-0.5B体育运动:训练计划制定

Qwen2.5-0.5B体育运动&#xff1a;训练计划制定 1. 技术背景与应用场景 随着人工智能在个性化服务领域的深入发展&#xff0c;大语言模型&#xff08;LLM&#xff09;正逐步从通用对话向垂直场景深化应用。体育训练作为高度依赖个体差异、科学规划和动态调整的领域&#xff0…

用NotaGen生成古典音乐|基于LLM的AI作曲实战

用NotaGen生成古典音乐&#xff5c;基于LLM的AI作曲实战 1. 概述 1.1 AI作曲的技术演进 随着深度学习与大语言模型&#xff08;Large Language Models, LLMs&#xff09;的发展&#xff0c;人工智能在创意领域的应用不断深化。从早期的规则驱动式音乐生成&#xff0c;到基于…

时差学者:2015科研日志-第四集:实验室的“原始劳作”

本集专属旁白&#xff1a;播放地址 本集播客&#xff1a; 播客地址 本故事的主题曲&#xff1a; 《时差钟摆》主题曲: 时差钟摆: 歌曲地址 第四集&#xff1a;实验室的“原始劳作” 场景一&#xff1a;凌晨四点的“设备战争” 凌晨4点17分&#xff0c;材料学院实验楼大厅。…

LangFlow+Auth:添加用户认证权限控制实战

LangFlowAuth&#xff1a;添加用户认证权限控制实战 1. 引言 1.1 业务场景描述 随着 AI 应用开发的普及&#xff0c;越来越多团队开始使用低代码平台提升研发效率。LangFlow 作为一款基于 LangChain 的可视化 AI 流水线构建工具&#xff0c;极大降低了大模型应用的开发门槛。…