android rc文件启动服务

1. 生成可执行文件

         检测文件存在,没有则创建。源码vendor/bin/test_services,编译生成test_services可执行文件。

vendor_product.mk
PRODUCT_PACKAGES += test_services           //services执行文件 - cpp文件
PRODUCT_PACKAGES += vendor.test_services.rc  //rc文件

在编译cpp的同级目录下添加rc文件以及修改Android.bp或Android.mk
Android.bp
init_rc: [ "vendor.test_services.rc", ],
or
Android.mk
LOCAL_INIT_RC := vendor.test_services.rc

out目录生成的路径
vendor/bin/test_services           
vendor/etc/init/vendor.test_services.rc

2. 书写vendor.test_servies.rc

      在确认vendor/bin/test_services下生成了执行文件test_services后,书写vendor.test_services.rc。

动作(action):以关键字"on" 开头,表示一堆命令
服务(service):以关键字“service”开头,表示启动某个进程的方式和参数

on property触发机制和实现原理
1、启动时,如果属性满足设定条件会触发一次
2、系统运行中如果属性发生变化,且新值等于设定值,则触发一次

service vendor.test_services /vendor/bin/test_services args
	user root
	group root system
	oneshot                                     //oneshot表示这个service只被启动一次
	disable                                     //不随class自动启动,只有根据service名才启动;
on property:persist.vendor.test_services = *    //匹配任何值都可以
	start vendor.test_services.                 //除此之外还有classstart

触发方式除了property属性值条件触发还有

on on early-init:在初始化早期阶段触发
on init:在初始化阶段触发
on late-init:在初始化晚期阶段触发
on boot/charger:当系统启动/充电时触发
test_services指的是服务名,后边依次是路径    参数
user root执行此服务前,请更改为用户名。当前默认为root
group root执行此服务之前,请更改为groupname。除了第一个必需的其他组名外,还用于设置流程的其他组(带有setgroups())。当前默认为root。
seclabel与SElinux相关
class 指定服务的类名。命名类中的所有服务必须一起启动和停止。如果未通过class选项指定服务,则将其视为“默认”类。
oneshot退出服务时不要重新启动它。当然如果你的程序是循环的则会一直执行
disabled该服务不会自动从其类开始。必须通过名称显式启动(即 start)。

3. SElinux权限问题

        test_services对应vendor.test_services.rc中定义的services,test_services_exec对应执行文件test_services。init_daemon_domain 是一个宏,用来使 test_services域生效,如果没有填加sepolicy的配置,则会报错init:service monitor does not have a SELinux domain defind

file_contexts 
/(vendor|system/vendor)/bin/test_services                                        u:object_r:test_services_exec:s0

test_services.te
type test_services, domain;
type test_services_exec, exec_type, vendor_file_type, file_type;
init_daemon_domain(test_services)
allow test_services vendor_sensors_prop:property_service { set };
allow test_services vendor_sensors_prop:file { getattr open read map };

get_prop(sns_client_wrist, vendor_sensors_prop);

allow test_services stest_services:qipcrtr_socket { setopt getattr create write read };

property_context
persist.vendor.sensors.test_services        u:object_r:vendor_sensors_prop:s0
...

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值