赞
踩
在做项目的时候遇到一个需求,需要开机启动一个服务,一开始调试的时候使用的是命令行执行命令,但是真正使用的时候就必须集成到固件里面去让其开机自动开启
首先想到的必然是在init.rc里面添加服务,我的是RK3326平台,init.rc位置在system/core/rootdir下,如何添加service服务是一门学问.接下来就一一介绍.
编写你需要执行的脚本,脚本一般是以.sh为后缀,脚本内容以#!bin/sh开头,然后后面接你的指令,如我的脚本文件
#!bin/sh
turenproc pebble-i2s
在init.rc里面添加服务,服务是以service开头,紧接你的服务名字,然后指明需要开机启动的脚本目录,具体如下:
service su_turenproc /system/bin/su_turenproc.sh
user root
group root
disabled
seclabel u:r:shell:s0
oneshot
在这个服务中,我的服务名字叫su_turenproc,需要执行的脚本是/system/bin/下的su_turenproc.sh,这个脚本文件就是在1中编写的脚本文件.
紧接着user root 和 group root 意思是使用 root 权限。
seclabel u:r?s0这句的具体含义大概是设置init进程的安全上下文
oneshot说明的是该操作只会执行一次,并不像其他带有 restart 指令的 service 一样当被 kill 调之后会重新调起。如果你希望被kill掉之后重新调起,那就不写.
添加完上面的服务之后还不行,还有一步最容易忽视的一步
启动刚刚添加的服务
on property:sys.boot_completed=1
start su_turenproc
这一步很重要,我就是做完第一步和第二步之后直接编译烧录,发现添加的服务并没有生效,折腾了很久之后才搞定,就是因为没有加第3步启动服务.
接下来编译烧录你就会发现开机执行了你编写的脚本.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。