您好,欢迎来到爱够旅游网。
搜索
您的当前位置:首页解决一个android service启动无法开文件的问题

解决一个android service启动无法开文件的问题

来源:爱够旅游网

问题描述

android hal层一般是通过service给系统提供服务的。一般需要将service配置为开机启动。调试阶段,我直接将service push到板卡上,进行调试,未出现问题无法开的问题。在最后集成完成后,放到板卡上,出现启动无法打开 /dev/uinput 的问题,报错为:

10-14 08:21:02.550   360   360 E ca_ins_hal: open /dev/uinput failed: Permission denied

提示为权限问题。但是系统并没有报 avc: denied 的问题。avc 相关的已经在集成时,解决了所有的 avc 报错。但是现在无法打开 /dev/uinput

猜测 te 文件添加的权限已经没有问题了。还有与权限相关的就是 rc 文件了。

android.hardware.gnss@2.1-service-ca_ins.rc :

service gnss-hal-service /vendor/bin/hw/android.hardware.gnss@2.1-service-ca_ins
	class hal
	user system
	group system

解决

这里我抄了一个demo的 rc 配置,使用的 class 是 hal,user 和 group 都是system,android 系统中只有root权限和非root权限。因此猜测在这里使用root权限可以解决上述问题。因此在系统里找了一个使用 root 权限的配置copy过来:

service gnss-hal-service /vendor/bin/hw/android.hardware.gnss@2.1-service-ca_ins
	class main
	user root
	group root

重新编译集成,再次启动, /dev/uinput 打开正常。接下来报除了一些 uinput 相关的 avc 权限问题,将需要的权限添加到 te 文件中即可,可能需要多次调试添加。

在解决权限问题时,最后会有一条无法解决:

10-14 08:52:08.847   475   475 I gnss@2.1-servic: type=1400 audit(0.0:7): avc: denied { dac_override } for capability=1 scontext=u:r:hal_gnss_ca_ins:s0 tcontext=u:r:hal_gnss_ca_ins:s0 tclass=capability permissive=1

将相应的权限添加到 te 文件会导致编译不通过。自己定义的权限和全局设置的权限要求冲突了。

解决方式参考:https:///k663514387/article/details/107983037

需要将进程添加到需要访问的文件所在的文件组:

dev/uinput:

se1000:/ # ls /dev/uinput  -al
crw-rw---- 1 uhid uhid 10, 223 1970-01-01 00:00 /dev/uinput

te 文件:

service gnss-hal-service /vendor/bin/hw/android.hardware.gnss@2.1-service-ca_ins
	class hal
	user system
	group system uhid

重新编译集成,不会在报 dac_override avc 错误。并且, /dev/uinput 也能正常打开。root 权限不可乱用 : (

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务