在开机往往我们想要做一些初始化的操作,这时候可以使用init.rc文件来实现,当然书写一个开机启动的服务也需要规范的。

假设是C程序,则需要准备C程序的源码,在我的例程中是一个在开机完成(android标志结束后,当然你也可以设置在boot阶段)时进行检测文件存在,没有则创建。代码在package/app/PxTPConfigRead里面。首先将其编译到out目录下的system/bin/下。可以在build/target/product下的base.mk下PRODUCT_PACKAGES+ = px_tp_config。这样编译时则会自动编译。

在确认system/bin/下生成了执行文件px_tp_config后,书写init.rc,这里建议在device/mediatek/mt67xx/ init.mt67xx.rc中写入。当然system/core/rootdir也是可以的。书写如下:

service px_tp_config /system/bin/px_tp_configuser rootgroup rootseclabel u:r:px_tp_config:s0class main    oneshot

这里解释下:service后px_tp_config 指的是服务名,而后的路径则是C执行文件在系统中的位置,user root代表使用root用户执行,group root 指的是组在root组,而seclabel与SElinux相关,class main指的是属于main类,当main执行时则会执行该服务,oneshot指的是执行一次,当然如果你的程序是循环的则会一直执行。(这里是服务声明)

有了声明自然有启动,上面设置的class main,则会自动在mian这个总服务启动时一起启动,当然也可以自己设置,比如:

on property:sys.boot_completed=1write /dev/ttyMT1 "test boot_completed writeing\n"  //在串口打印,测试是否成功加入该服务start px_tp_config

on property:sys.boot_completed=1意思是在开机完全时启动该服务时,执行下面的语句。

当然你想在boot时或是其他时候执行,则在 on boot下写start px_tp_config。

写好这些后,全编译一次。

确认服务执行没有,可在log文件中搜索该服务名字段:

如果有这些则证明服务已经启动了。

SElinux

当然在运行过程中会遇到问题,AVC问题(未遇到则不添加),则需要添加SElinux权限,或者关闭SElinux。

在例程中做了一个添加的示范,首先在device\mediatek\common\sepolicy\file_contexts中声明字段或者叫domain,如:/system/bin/px_tp_config u:object_r:px_tp_config_exec:s0。可直接替换成自己的test即可。

接着添加te规则,命名为: 服务名.te。这里是px_tp_config.te。前面:

type px_tp_config, domain;type px_tp_config_exec, exec_type, file_type;init_daemon_domain(px_tp_config)domain_trans(init, shell_exec, px_tp_config)

而后面的allow则需要按照自己的需要一条一条添加,工作比较繁琐,添加依据是:查看打印的log,在log搜索AVC字段,然后找到含有px_tp_config的avc denied。根据规则一步一步添加,规则报错不会一次性报完,只会在添加完当前规则后,报下一条或几条的错误。前面可按照自己的替换为test即可。

添加了自己的规则,需要再BoardConfig.mk中声明下使其编译时te文件能够被包含进去。

注:

1.检查是否编译到了init.rc文件,可在out\target\product\$project\root

下查看相同名的init.rc中内容是否与你修改的一致。

2.烧录:若只是修改了init.rc,则只需要烧录boot.img,若修改了C文件则要连syste.img一起烧录。

在此附上我的demo下载地址,供大家学习参考:https://files.cnblogs.com/files/inkhearts/%E5%BC%80%E6%9C%BA%E5%90%AF%E5%8A%A8C%E4%BB%A3%E7%A0%81.rar

最后再附上我认为比较有用的链接:

https://www.cnblogs.com/lxjshuju/p/6915468.html

https://blog.csdn.net/zhonglunshun/article/details/78615980

https://blog.csdn.net/qq_28899635/article/details/56289063

https://blog.csdn.net/feigebangni/article/details/50300063

转载于:https://www.cnblogs.com/inkhearts/p/10478981.html

MTK(android init.rc) 写一个开机启动的服务相关推荐

  1. Android如何配置init.rc中的开机启动进程(service)【转】

    本文转载自:http://blog.csdn.net/qq_28899635/article/details/56289063 开篇:为什么写这篇文章 先说下我自己的情况,我是个普通的大四学生,之前在 ...

  2. Android init.rc 服务启动不成功

    Android init.rc 服务启动不成功 问题 在开发过程中发现一个问题,我们需要在开机的时候判断硬件版本号去启动服务, 服务的名字是ledservice和ledservice4,但是发现每次烧 ...

  3. android init.rc中启动的service 默认是disable的,后续如何启动此服务

    如果 android init.rc中启动的service 默认是disable的,如何才能启动此服务呢? init.rc中可以直接启动service 附带的参数决定启动程序的状态,例如数据业务中配置 ...

  4. Android init.rc文件格式解析

    /****************************************************************************** Android init.rc文件格式解 ...

  5. Android init.rc文件解析过程详解(三)

    Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...

  6. Android init.rc文件解析过程详解(一)

        Android init.rc文件解析过程详解(一) 一.init.rc文件结构介绍 init.rc文件基本组成单位是section, section分为三种类型,分别由三个关键字(所谓关键字 ...

  7. android init.rc 到底在哪里?

    这些天想加一个启动进程到android的启动里面,结果找了半天修改启动的办法,大多提到是在init.rc里面修改,但是网上很多版本都没研究清楚啊 1 不知道源码的情况下,从安装包里面拿 通过下面的例子 ...

  8. Android 系统(242)---Android init.rc执行顺序

    Android init.rc执行顺序 1. 所有的action运行于service之前 2.  下面为各个section的执行顺序,英文编号的section是系统内建的(写死在init.c中的命令) ...

  9. 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

最新文章

  1. 苹果测试软件testflight游戏,苹果内测工具TestFlight的使用
  2. git与github区别与简介
  3. 痴迷物理,无法自拔——3.24
  4. vue 用key拿对象value_利用 WeakMap 对 Vue 新建数组中的对象赋予 :key
  5. Highcharts 本地导出图片 Java
  6. LeetCode 1636. 按照频率将数组升序排序(哈希+排序)
  7. Spring框架学习笔记07:基于XML配置方式使用Spring MVC
  8. 一步一步写算法(之链表重合)
  9. mac php memcache扩展,Mac下PHP安装Memcache扩展
  10. 教大家抖音怎么开通直播功能
  11. Code For Better 谷歌开发者之声——Google Play
  12. 《Zero to One》读书笔记
  13. ceph deep scrub扫描的脚本
  14. python鼠标移动到网页上、获取网页信息_python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法...
  15. 万字吐血好文,一线分析师的4大总结。
  16. python画史迪仔_手把手教你如何使用Python来生成马赛克画!
  17. [HNOI2004]高精度开根
  18. Debian编译内核教程
  19. The server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents more than one time zone
  20. 开咖啡店会遇到的哪些问题?总结八大解决方法

热门文章

  1. 汇编语言:第二章 寄存器
  2. AE安装部署以及监测ArcEngine runtime 9.3是否安装
  3. Kubernetes理论02
  4. 机器学习之--数据构造,函数图显示
  5. 归纳(四):树链剖分
  6. appium+python+windows执行测试用例,并使用HTMLTestRunner输出测试报告
  7. 一句代码实现批量数据绑定[下篇]
  8. 回首我的2007 12/25
  9. 一般左边后台点击收缩展开的效果
  10. Const 深度解析