在开机往往我们想要做一些初始化的操作,这时候可以使用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_config
user root
group root
seclabel u:r:px_tp_config:s0
class 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=
write /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

MTK(android init.rc) 写一个开机启动的服务的更多相关文章

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

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

  2. Mac下用Launchd实现使用rc.local执行开机启动命令

    其实原理很简单,使用Launchd创建一个开机启动的服务,然后这个服务关联/etc/rc.local文件,那么接下来操作rc.local就和Linux下一样的了. 当然,这种思路还可以直接使用在~/. ...

  3. Android init.rc解析【转】

    转自:http://www.linuxidc.com/Linux/2014-10/108438.htm 本文主要来自$Android_SOURCE/system/init/readme.txt的翻译. ...

  4. Android init.rc文件浅析

    Android init.rc文件浅析 分类: Android2012-04-13 18:00 13149人阅读 评论(2) 收藏 举报 androidservicepathactionsocketc ...

  5. init.rc文件中面启动c++程序,通过jni调用java实现

    </pre><p>注:假设是自己的myself.jar包,还要修改例如以下:</p><p>target/product/core_base.mk PRO ...

  6. Ubuntu 16.04设置rc.local开机启动命令/脚本的方法(通过update-rc.d管理Ubuntu开机启动程序/服务)

    注意:rc.local脚本里面启动的用户默认为root权限. 一.rc.local脚本 rc.local脚本是一个Ubuntu开机后会自动执行的脚本,我们可以在该脚本内添加命令行指令.该脚本位于/et ...

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

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

  8. ubuntu18.04 开机启动/停止服务

    ubuntu18.04 开机启动/停止服务 一.删除一个服务 如果要删除一个服务,使用uodate-rc.d(参数-f是强制删除符号链接) update-rc.d -f apache2 remove ...

  9. laravel学习:php写一个简单的ioc服务管理容器

    php写一个简单的ioc服务管理容器 原创: 陈晨 CoderStory 2018-01-14 最近学习laravel框架,了解到laravel核心是一个大容器,这个容器负责几乎所有服务组件的实例化以 ...

随机推荐

  1. 换目标啦,初识PHP

    一.初识PHP脚步程序 1.PHP开始标记 <?php 2.PHP结束标记 ?> <?php?> 3.我们的页面最终是通过html,css,js来展示出一个炫丽的界面 4.PH ...

  2. Vs Code 中文包设置

    首先打开Vs Code 然后点击扩展 下载中文包 安装中文包 在没打开任何文件的时候我们可以看到一些提示 这个时候使用快捷键 Ctrl + Shift + P  (显示所有命令),然后选择" ...

  3. vlan分类简易解释

    注:出自http://wushank.blog.51cto.com/3489095/1305510 收报文: Acess端口1.收到一个报文,判断是否有VLAN信息:如果没有则打上端口的PVID,并进 ...

  4. 理解JS原型和原型链

    本文通过对<JavaScript高级程序设计>第六章的理解,加上自己的理解,重组了部分内容,形成下面的文字. 理解了原型这个概念,你的JS世界会清明很多. 为什么要为JS创造原型这个概念 ...

  5. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  6. delphi 中实现当期日期 减去 若干小时的方法

    假定当期日期为:2011-08-01 15:00:00 now - 1      :代表前一天的日期 返回值:2011-07-31 15:00:00 now - 1/3   :代表8小时前       ...

  7. less的使用(好文章)

    好文章链接:30分钟学会less 自己总结一下这篇文章中的几个关键字:变量.混合.函数.嵌套.@import 下面贴上自己照着上面写的一些代码: <template> <div cl ...

  8. 流程控制:顺序结构: 代码默认从上到下依次执行 分支结构: 细分在分为如下 循环结构: while .. for ..

    # ### 流程控制: ''' 流程: 代码执行的过程 流程控制: 对代码执行的过程进行管控 顺序结构: 代码默认从上到下依次执行 分支结构: 细分在分为如下 循环结构: while .. for . ...

  9. selenium的

    1.简介 selenium可以认为是反反爬虫的最佳利器,它基本可以等同于真实的浏览器访问,用它可以加载到动态数据,也省去了cookie的操作,但是用这个有一个重大的效率问题.所以selenium可以用 ...

  10. 一个农民工混迹于 IT 行业多年后的泣血总结

    一看题目,你心里一定闪出一个想法,这又是一篇软文吧,是不是,不想辩别了,自己判断吧哈哈.这是根据本人真实经历所写的一篇总结.假如你满足你的现状,这就是一篇软文,请立刻关闭此文章,继续你现在的生活.   ...