Android通过rc启动三方可执行文件

Android init.rc的启动流程 Android 系统的启动过程分为几个主要阶段,每个阶段负责不同的初始化任务。在 Android 启动时,init程序是第一个运行的用户空间进程。init负责启动系统服务、挂载文件系统、设置权限等任务。init.rc是init程序的配置文件,定义了这些启动任务和服务的详细信息,文件中的指令会按照特定的顺序执行来完成这些任务。 阅读详情

步骤

  1. 编写rc文件
  2. 添加te文件
  3. 加入编译
  4. 调试

编写rc文件

service dms_server /vendor/bin/dms --flagfile=/vendor/bin/dms.flag
    user root
    oneshot
    group root shell system inet
    disable

on property:vendor.dms.enable=1
    chmod 0777 /mnt/obb
    touch /mnt/obb/raw_driver
    chmod 0777 /mnt/obb/raw_driver
    symlink /vendor/bin/dms_release /dms_release
    start dms_server

tips:
service
class main //init会在最后 boot_complete 完成后,自动拉来。这样onPropery 属性就无法触发了

服务
service <name><pathname> [ <argument> ]*
    <option>
    <option>
参数含义
name表示此服务的名称
pathname此服务所在路径因为是可执行文件,所以一定有存储路径。
argument启动服务所带的参数
option对此服务的约束选项
选项描述
critical据设备相关的关键服务,如果在4分钟内,此服务重复启动了4次,那么设备将会重启进入还原模式。
disabled服务不会自动运行,必须显式地通过服务器来启动。
setenv设置环境变量
socket [[ ]]在/dev/socket/下创建一个unix domain的socket,并传递创建的文件描述符fd给服务进程.其中type必须为dgram或stream,seqpacket. 用户名和组名默认为0
user在执行此服务之前先切换用户名。当前默认为root.
group [ ]类似于user,切换组名
oneshot当此服务退出时不会自动重启.
class给服务指定一个类属,这样方便操作多个服务同时启动或停止.默认情况下为default.
onrestart当服务重启时执行一条指令,
service dms_server /vendor/bin/dms --flagfile=/vendor/bin/dms.flag
    user root  //给服务指定一个类属,这样方便操作多个服务同时启动或停止
    oneshot  //当此服务退出时不会自动重启
    group root shell system inet
    disable   //服务不会自动运行
动作
on  <trigger>      ## 触发条件
    <command>      ##执行命令
    <command1>     ##可以执行多个命令
触发条件

on < trigger > 表示当什么条件满足的时候触发动作。

格式含义
on early-init在初始化早期阶段触发
on init在初始化阶段触发
on late-init在初始化晚期阶段触发
on boot/charger当系统启动/充电时触发
on property当属性值满足条件时触发
命令
命令描写叙述
exec < path> [ < argument> ]*运行指定路径下的程序,并传递參数.
export < name> < value>设置全局环境參数。此參数被设置后对全部进程都有效.
ifup < interface>使指定的网络接口"上线",相当激活指定的网络接口
import < filename>导入一个额外的init配置文件.
hostname < name>设置主机名
chdir < directory>改变工作文件夹.
chmod < octal-mode> < path>改变指定文件的读取权限.
chown < owner> < group> < path>改变指定文件的拥有都和组名的属性.
chroot < directory>改变进行的根文件夹.
class_start < serviceclass>启动指定类属的全部服务,假设服务已经启动,则不再反复启动.
class_stop < serviceclass>停止指定类属的所胡服务.
domainname < name>设置域名
insmod < path>安装模块到指定路径.
mkdir < path> [mode] [owner] [group]用指定參数创建一个文件夹,在默认情况下,创建的文件夹读取权限为755.username为root,组名为root.
mount < type> < device> < dir> [ < mountoption> ]*类似于linux的mount指令
setkeyTBD(To Be Determined)
setprop < name> < value>设置属性及相应的值.
setrlimit < resource> < cur> < max>设置资源的rlimit(资源限制),不懂就百度一下rlimit
start < service>假设指定的服务未启动,则启动它.
stop < service>假设指定的服务当前正在执行。则停止它.
symlink < target> < path>创建一个符号链接.
sysclktz < mins_west_of_gmt>设置系统基准时间.
trigger < event>Trigger an event. Used to queue an action from another action. 这名话没有理解,望高手指点.
write < path > < string> [ < string> ]*往指定的文件写字符串.

on property:vendor.dms.enable=1 // 当属性vendor.dms.enable 为1时触发
    chmod 0777 /mnt/obb     //改变/mnt/obb 操作权限
    touch /mnt/obb/raw_driver //创建raw_driver文件
    chmod 0777 /mnt/obb/raw_driver 
    symlink /vendor/bin/dms_release /dms_release  //给 /vendor/bin/dms_release 创建软链接
    start dms_server  //启动定义的服务

参考:
Android init.rc文件浅析
init.rc深入学习

添加te文件

作为 Android 安全模型的一部分,Android 使用安全增强型 Linux (SELinux) 对所有进程强制执行强制访问控制 (MAC),甚至包括以 Root/超级用户权限运行的进程(Linux 功能)。

SELinux 可以在各种模式下实现:
宽容模式 - 仅记录但不强制执行 SELinux 安全政策。
强制模式 - 强制执行并记录安全政策。如果失败,则显示为 EPERM 错误。
在选择强制执行级别时只能二择其一,您的选择将决定您的政策是采取操作,还是仅允许您收集潜在的失败事件。宽容模式在实现过程中尤其有用。

在开发环境可以通过:

setenforce 0  //宽容模式

setenforce 1 // 强制模式
标签、规则和域

SELinux 依靠标签来匹配操作和政策。标签用于决定允许的事项。套接字、文件和进程在 SELinux 中都有标签。SELinux 在做决定时需参照两点:一是为这些对象分配的标签,二是定义这些对象如何交互的政策。

在 SELinux 中,标签采用以下形式:user:role:type:mls_level

  • user :
  • role :
  • type : 是访问决定的主要组成部分,可通过构成标签的其他组成部分进行修改。对象会映射到类,对每个类的不同访问类型由权限表示。
  • mls_level:
u:object_r:dms_exec:s0
规则和域

政策规则采用以下形式:allow domains types:classes permissions;,其中:

  • Domain - 一个进程或一组进程的标签。也称为域类型,因为它只是指进程的类型。
  • Type - 一个对象(例如,文件、套接字)或一组对象的标签。
  • Class - 要访问的对象(例如,文件、套接字)的类型。
  • Permission - 要执行的操作(例如,读取、写入)。
allow appdomain app_data_file:file rw_file_perms;
// file_context
#dms
/vendor/bin/dms                  u:object_r:dms_exec:s0


//dms.te
type dms,domain;
type dms_exec,exec_type,file_type,vendor_file_type;

init_daemon_domain(dms)
net_domain(dms)
参考

AOSP-安全性-功能

加入编译

Android.mk 用预编译,将可执行文件加入系统中。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := dms	
LOCAL_SRC_FILES := dms
LOCAL_INIT_RC := dms.rc
LOCAL_MODULE_TAGS  := optional
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_PATH  := $(TARGET_OUT_VENDOR_EXcECUTABLES)
include $(BUILD_PREBUILT)
参考

Android mk 引用 jar 包、so 库、aar 包,系统签名
Android系统开发进阶-Android编译系统介绍

调试

1.
setprop vendor.dms.enable 1 //通过条件触发
or
start dms_server  //启动dms_server 

2.
logcat -b all -s init // 查看init进程log

3.
ps -ef | grep dms  //查看dms进程id
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 阅读详情

相关推荐

Android启动初始化init.rc详解

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

fcf1990501的专栏 1238

init rc中创建文件

android的init rc目前不支持touch: touch /data/misc/logd/kmsg.log log中会报错:  init: /init.rc: 83: invalid keyword 'touch' 可以用copy和write命令创建文件 write /data/non-empty-file  copy /dev/null /data/em

rockly89的博客 3823

Android 进阶——系统启动之Android init.rc脚本解析(四)

init.rc 脚本结构、基本语法

最美不过,心中有梦,身旁有你! 3419

Android init.rc文件语法

服务以 service开头,由init进程启动,一般运行在init的一个子进程,所以启动service前需要判断对应的可执行文件是否存在。rc文件语法是以行尾单位,以空格间隔的语法,以#开始代表注释行。rc文件主要包含Action、Service、command、Options,其中对于Action和Service的名称都是唯一的,对于重复的命名视为无效。例如:service zygote /system/bin/app_process64代表的是服务名zygote,服务。

xue_wei1210的专栏 2180

RK3588安卓系统开机自启动:从广播到init.rc的四种方案与实战

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

667

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

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

anheku1562的博客 462

Android启动脚本init.rc

<br />摘自《Android系统原理及开发要点详解》<br />Android启动脚本init.rc<br />在 Android中使用启动脚本init.rc,可以在系统的初始化过程中进行一些简单的初始化操作。这个脚本被直接安装到目标系统的根文件系统中,被 init可执行程序解析。 init.rc是在init启动后被执行的启动脚本,其语法主要包含了以下内容:<br />Commands:命令<br /> Actions: 动作<br /> Triggers:触发条件<br /> Services:

tanxs001的专栏 849

Android执行删除system/bin/xxx目录下文件命令

Android里面执行命令的方式很多, Runtime.getRuntime().exec(String command); Runtime.getRuntime().exec(String [] cmdArray); Runtime.getRuntime().exec(String command, String [] envp); Runtime.getRuntime().exec(String [] cmdArray, String [] envp); Runtime.getRuntime(

有问题或资源连接有缺失的可以私信公众号新潮看世界获取 1299

安卓 rc 文件

init.target.rc`则是`init.rc`文件中的一个重要组成部分,它包含了针对特定启动目标的配置和命令。exec - logd log -- /system/bin/logcat -c -f /data/misc/logd/logcat -n ${logd.logpersistd.size:-256} // 使用指定参数执行 logcat 命令,清空 `/data/misc/logd/logcat` 中的内容。保持文件和目录的安全上下文与系统策略一致是为了确保系统的安全性和稳定性。

introrockfan的博客 1780

zabbix 监控EMC存储

经过搜索,找到了脚本地址,该项目应该是模板原作者创建的,该项目也有zabbix模板,和上面的应该是相同的,我用的是上面的模板。./unity_get_state.py --api_ip='X.X.X.X' --api_port='443' --api_user='zabbix' --api_password='PASSWORD' --storage_name="zabbix web前端配置的主机名" --discovery。修改权限,给zabbix用户执行权限,模板调用时以zabbix用户执行。

wangyfde的专栏 3753

FLUKA软件在Ubuntu的安装指南(亲测有效)

FLUKA其强大的蒙特卡洛模拟能力使得用户能够模拟复杂的辐射相互作用过程

chencheng1127的博客 2883

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

软件工程期末知识点总结【超详细】

生命周期模型(过程模型):瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型。2、实体联系图:1、数据对象2、属性3、联系(1:1、1:N、M:N)3、语句覆盖 就是设计足够的调试用例,使得程序中的每个语句至少执行一次。 5、判定覆盖就是设计足够的测试用例,使得程序中每个判定的取“真”分支和取“假”分支至少都执行一次,判定覆盖又称分支覆盖 6、条件覆盖就是设计足够的测试用例,使得程序判定中的每个条件能获得各种可能的结果。7、软件开发时期通常分成4个阶段:总体设计、详细设计、编码和单元测试、综合测试。

这个人好有趣....hh 1万+

android12编译三方提供的bin文件,通过selinux配置并实现rc开机启动

android12编译三方提供的bin文件到system/bin目录,配置te通过selinux,并实现rc开机启动

隋缘 951

Android 的端智能学习路径

基础层:先补齐 Android 进阶(JNI / 性能优化)和 AI 基础概念,无需深入算法开发;核心层:掌握 TFLite 的模型加载、推理、量化,能完成基础端侧推理;落地层:聚焦实战场景(图像 / OCR / 语音),解决工程化问题(模型管理、异常处理);优化层:通过模型量化、硬件加速、工程优化,提升推理性能和用户体验。

hqiangtai的博客 340

泛微ecology9 HRMwebservice接口实战:企业组织架构与人员信息同步指南

本文详细介绍了泛微ecology9 HRMwebservice接口在企业系统集成中的实战应用,重点解析了如何通过该接口实现组织架构与人员信息的双向同步。内容涵盖环境配置、核心接口调用、数据格式规范及常见错误排查,旨在帮助开发与运维工程师高效完成主数据同步,提升企业IT管理效率。

weixin_29323365的博客 495

Android rc文件实现开机启动可执行文件

Android 实现开机启动可执行文件 应业务需求,实现开机启动一个可执行文件,记录一下。 1.在目标目录下新建Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := android.hardware.test_default@1.0-service LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := EXECUTABLES LOCAL

weixin_43739679的博客 2100

基于ANSYS的电磁兼容仿真教程

最近,在做某系统的EMC仿真,使用ANSYS套件,对仿真学习做简要记录。本书简介与目录如下:本书配套有:视频教程+工程源文件+彩色仿真图片,下载链接如下:(审核中)第1章 基础知识1.1 电磁兼容基础​​​MS2、EMC三要素:3、 国际无线电干扰特别委员会标准:CISPR标准4、电磁兼容测试认证:传导发射(CE)、传导敏感度(CS)、辐射发射(RE)和辐射敏感度(RS)测试。

weixin_42508010的博客 2050

Android rc 文件详解

作为Android系统的第一个进程,Init进程承担这很多重要的初始化任务,一般Init进程的初始化可以分为两部分,前半部分挂载文件系统,初始化属性系统和Klog, selinux的初始化等,后半部分重要通过解析init.rc来初始化系统daemon服务进程,然后以epoll的监控属性文件,系统信号等。init.rc则是init进程启动的配置脚本,这个脚本是用一种叫Android Init Language(Android初始化语言)的语言写的。如果你的进程请求Linux的特殊能力,就不要用这个命令。

yanglin10000的博客 3800

IPCP(IP Control Protocol,IP控制协议)

IPCP(IP Control Protocol,IP控制协议)

天赐好车的博客 754

【2026OD新机考】【不定滑窗】20260415-API请求日志去重分析【Py/Java/C++/C/JS/Go六种语言OD真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解

中找到所有的连续的相同元素,同时统计对应的连续相同元素对应的值的平均值。:当右指针为第一个元素(没有前一个元素),或者右指针对应的元素。某微服务系统的日志监控平台需分析API调用记录,日志含大量。相等,说明当前元素仍然属于同一个相同元素窗口,将当前元素值。中的所有元素均相等,并且计算窗口和情况即可。请实现一个函数,对给定的日志数据去重合并处理。位置,表示开启一个新的窗口,此时需要重置窗口和。,为了优化重复的请求记录,存储和后续分析需对。:对应的响应时间数组(毫秒)。重新置为当前右指针的元素值。

weixin_48157259的博客 111

MTK(android init.rc) 开机启动服务

MTK(android init.rc) 开机启动服务 在开机往往我们想要做一些初始化的操作,这时候可以使用init.rc文件来实现,当然书写一个开机启动的服务也需要规范的 1. 生成可执行文件 假设是C程序,则需要准备C程序的源码,在我的例程中是一个在开机完成(android标志结束后,当然你也可以设置在boot阶段)时进行检测文件存在,没有则创建。代码在package/app/PxTPConfigRead里面。首先将其编译到out目录下的system/bin/下。可以在build/target/pr

Demon_xiaochunjie的博客 1937

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android的自启动

最近要用到这个,所以也花时间看看。从分层来说,安卓的自启动也分成三种,app的自启动,framework服务的自启动,HAL服务的自启动。现在简单说说这三种把。

fanged的专栏 1699

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Android.mk 绑定.rc和二进制

引言:需求如下,有一个二进制Service服务,比如叫CarplaySevice,他的具体作用就是一个后台Service,但是需要在系统开机之后被调用起来。 因为.rc文件的特性,所以我们就采用rc文件来启动,其实本来就是用rc文件来启动CarplayService 的,只不过之前是手动启动,用户是肯定不能自己去输入命令的,所以就需要自动绑定并启动该Service 以下总结了2种方法: 方法1:是...

唯爱丶卡卡西的博客 1461

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【Android FrameWork】第五天:init加载RC文件

本文基于Android 12+源码,深入分析Init进程加载RC文件的机制。Init进程作为用户空间首个进程,通过解析RC文件(初始化脚本)控制系统启动流程。文章详细阐述了两个关键阶段:1)初始化解析环境(日志系统、文件系统挂载、解析器配置);2)RC文件解析过程(主文件解析、Import指令处理、Service/Action指令解析)。源码分析表明,Init通过Parser类实现指令映射,ServiceParser和ActionParser分别处理服务定义和动作指令,最终将配置存入全局管理类。该机制为理解

u012739527的博客 1849

Android在init.rc中自定义开机启动进程(service)

Android在init.rc中自定义开机启动进程(service)

似霰的博客 1249
上一篇: AOSP 预编译
下一篇: Bluetooth HCI 学习
leoStack
博客等级 码龄11年 16粉丝 16原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值