• 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. ...

  • 相关阅读:
    【模方ModelFun】实景三维建模和修模4.0.7最新版安装包以及图文安装教程
    高级架构师_Redis_第2章_数据类型与底层数据结构
    学习 vite + vue3 + pinia + ts(四)setup异步返回 async setup
    Unity --- 文本输入框的使用
    Oracle 数据库集群常用巡检命令
    【JavaEE】CAS(Compare And Swap)操作
    基于(N-1)×(N-1)棋盘的解的情况推出N×N棋盘的解的情况的N皇后问题
    【无标题】
    基于拉普拉斯金字塔算法的图像融合,opencv(C++)实现
    自动化测试 | Selenium自动化测试框架,实战遇到的坑都在这了,玩转自动化测试
  • 原文地址:https://blog.csdn.net/wangbuji/article/details/126261898