[Android O] [RK3399] -- 在 init 里添加一个系统服务并
前言
在实际的项目中,使用到一个 GPS 模块,该模块需要在系统启动时启动,于是这里编写了 GPS 启动的程序,并添加到 init 里,进行开机自启动。具体实现下面进行详细介绍。
一、GPS 启动源码如下
#include#include #include int main() { for(;;) { if(aess("/dev/ttyUSB2", F_OK) == 0) { system("echo -e "AT+QGPS=1rn" > /dev/ttyUSB2"); sleep(2); sleep(20); return 0; } printf("ait for sleep n"); sleep(2); } return 1; }
对应的 Android.mk 如下
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) mon_src_files := main.c LOCAL_MODULE := gpsopen LOCAL_SRC_FILES := $(mon_src_files) include $(BUILD_EXECUTABLE)
以上程序通过发送 AT 指令 启动GPS模块。
二、添加 init serviceservice(服务)是一个程序,以 service 开头,由 init 进程启动,一般运行于一个 init 的子程序,所以启动 service 前需要判断对应的可执行文件是否存在。init 生成的子进程定义在 rc 文件,其中每一个 service,在启动时会通过 fork 方式生成子进程。
在此次需求中,我们把该 service 添加到 /device/rockchip/mon/init.rk30board.rc 文件中
service gpsopen /system/bin/gpsopen class mian oneshot
,我们把 service gpsopen 添加到位于 /device/rockchip/mon/device.mk 中的 PRODUCT_PACKAGES 属性中
PRODUCT_PACKAGES += ... ... gpsopen
PRODUCT_PACKAGES 指定 make 时需要编译进 system 中的包,这部分虽然也生成 apk,但用户是删不掉的。
三、添加系统服务的权限声明1、定义文件的安全上下文
添加以下内容到 /device/rockchip/mon/sepolicy/file_contexts 文件中
/system/bin/gpsopen u:object_r:gpsopen_exec:s0
2、创建一个 gpsopen.te 文件,在 /device/rockchip/mon/sepolicy/ 目录,内容如下
type gpsopen, domain; // gpsopen service 的域(domain) 类型定义 type gpsopen_exec, exec_type, file_type; //gpsopen 的可执行文件(客体) 的类型定义 init_daemon_domain(gpsopen) // init 启动service 时类型转换声明,直接用一个宏,主要是用于把 gpsopen_exec(客体) 转换成 demo(进程域) allo gpsopen self:capability dac_override; typeattribute gpsopen coredomain;
附ps -Z 查看应用权限上下文,如 Setting 是 u:r:system_app:s0
ls -Z 查看文件的安全上下文
空调维修
- 温岭冰箱全国统一服务热线-全国统一人工【7X2
- 荆州速热热水器维修(荆州热水器维修)
- 昆山热水器故障码5ER-昆山热水器故障码26
- 温岭洗衣机24小时服务电话—(7X24小时)登记报
- 统帅热水器售后维修服务电话—— (7X24小时)登
- 阳江中央空调统一电话热线-阳江空调官方售后电
- 乌鲁木齐阳春燃气灶厂家服务热线
- 珠海许昌集成灶售后服务电话-全国统一人工【
- 乌鲁木齐中央空调维修服务专线-乌鲁木齐中央空
- 新沂热水器故障电话码维修-新沂热水器常见故障
- 诸城壁挂炉24小时服务热线电话
- 靖江空调24小时服务电话-——售后维修中心电话
- 空调室外滴水管维修(空调室外排水管维修)
- 九江壁挂炉400全国服务电话-(7X24小时)登记报修
- 热水器故障码f.22怎么解决-热水器f0故障解决方法
- 营口热水器售后维修服务电话—— 全国统一人工