• android rc文件启动服务


    1. 生成可执行文件

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

    1. vendor_product.mk
    2. PRODUCT_PACKAGES += test_services //services执行文件 - cpp文件
    3. PRODUCT_PACKAGES += vendor.test_services.rc //rc文件
    4. 在编译cpp的同级目录下添加rc文件以及修改Android.bp或Android.mk
    5. Android.bp
    6. init_rc: [ "vendor.test_services.rc", ],
    7. or
    8. Android.mk
    9. LOCAL_INIT_RC := vendor.test_services.rc
    10. out目录生成的路径
    11. vendor/bin/test_services
    12. 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、系统运行中如果属性发生变化,且新值等于设定值,则触发一次

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

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

    1. on on early-init:在初始化早期阶段触发
    2. on init:在初始化阶段触发
    3. on late-init:在初始化晚期阶段触发
    4. 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

    1. file_contexts
    2. /(vendor|system/vendor)/bin/test_services u:object_r:test_services_exec:s0
    3. test_services.te
    4. type test_services, domain;
    5. type test_services_exec, exec_type, vendor_file_type, file_type;
    6. init_daemon_domain(test_services)
    7. allow test_services vendor_sensors_prop:property_service { set };
    8. allow test_services vendor_sensors_prop:file { getattr open read map };
    9. get_prop(sns_client_wrist, vendor_sensors_prop);
    10. allow test_services stest_services:qipcrtr_socket { setopt getattr create write read };
    11. property_context
    12. persist.vendor.sensors.test_services u:object_r:vendor_sensors_prop:s0
    13. ...

  • 相关阅读:
    elementPlus 图标不显示 属性模式不显示
    【如何学习Python自动化测试】—— 鼠标键盘操作
    掀起新一轮工程项目建设热潮,用工需求大幅增加
    iNFTnews | 虚拟租赁是Web3的下一个发展方向
    学习-Java数组之foreach遍历数组之正负数数量统计
    Spring Boot 整合 NoSQL(3)
    服务器配置openvpn,ssh连接断开
    【C#】Redis在net core下使用教程
    视频监控/安防监控/视频云存储EasyCVR平台设备分配模块升级详解
    每日4道算法题——第029天
  • 原文地址:https://blog.csdn.net/wangbuji/article/details/126261898