完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在实际的项目中,使用到一个 GPS 模块,该模块需要在系统启动时启动,于是这里编写了 GPS 启动的程序,并添加到 init 里,进行开机自启动。具体实现下面进行详细介绍。
一、GPS 启动 源码如下: #include #include #include int main() { for(;;) { if(access("/dev/ttyUSB2", F_OK) == 0) { system("echo -e "AT+QGPS=1rn" > /dev/ttyUSB2"); sleep(2); sleep(20); return 0; } printf("wait for sleep n"); sleep(2); } return 1; } 对应的 Android.mk 如下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) common_src_files := main.c LOCAL_MODULE := gpsopen LOCAL_SRC_FILES := $(common_src_files) include $(BUILD_EXECUTABLE) 以上程序通过发送 AT 指令 启动GPS模块。 二、添加 init service service(服务)是一个程序,以 service 开头,由 init 进程启动,一般运行于另外一个 init 的子程序,所以启动 service 前需要判断对应的可执行文件是否存在。init 生成的子进程定义在 rc 文件,其中每一个 service,在启动时会通过 fork 方式生成子进程。 在此次需求中,我们把该 service 添加到 /device/rockchip/common/init.rk30board.rc 文件中: service gpsopen /system/bin/gpsopen class mian oneshot 另外,我们把 service gpsopen 添加到位于 /device/rockchip/common/device.mk 中的 PRODUCT_PACKAGES 属性中: PRODUCT_PACKAGES += ... ... gpsopen PRODUCT_PACKAGES 指定 make 时需要编译进 system 中的包,这部分虽然也生成 apk,但用户是删不掉的。 三、添加系统服务的权限声明 1、定义文件的安全上下文: 添加以下内容到 /device/rockchip/common/sepolicy/file_contexts 文件中 /system/bin/gpsopen u:object_r:gpsopen_exec:s0 2、创建一个 gpsopen.te 文件,在 /device/rockchip/common/sepolicy/ 目录,内容如下: type gpsopen, domain; // gpsopen service 的域(domain) 类型定义 type gpsopen_exec, exec_type, file_type; //gpsopen 的可执行文件(客体) 的类型定义 init_daemon_domain(gpsopen) // init 启动service 时类型转换声明,直接用一个宏,主要是用于把 gpsopen_exec(客体) 转换成 demo(进程域) allow gpsopen self:capability dac_override; typeattribute gpsopen coredomain; 原作者:BestW2Y |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
678 浏览 0 评论
920 浏览 1 评论
814 浏览 1 评论
2030 浏览 1 评论
3275 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 02:26 , Processed in 0.369306 second(s), Total 39, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号