android在hal下 如何获得对一个内核节点的访问权限

在Android 5.0及以上版本,由于SEAndroid/SElinux安全机制,即使在ueventd.rc中设置权限,JNI仍无法通过HAL访问内核节点。解决方法包括修改file_contexts.be,device.te,system_server.te文件,以授予system_server进程对特定内核节点的读写权限。在Android 5.1后,添加自定义服务时可能遇到SecurityException,需要在service_contexts和service.te中进行相应配置。
摘要由CSDN通过智能技术生成

Android 5.0以上,我们发现jni通过hal层去操作内核节点时PERMISSION DENIED 即使在Android源代码工程目录下,进入到system/core/rootdir目录,里面有一个名为ueventd.rc文件,往里面添加一行:/dev/hello 0666 root root ,此操作仍然不能让上层去读写相应的节点, 因为5.0以上采取了SEAndroid/SElinux的安全机制,即使拥有root权限,或者对某内核节点设置为777的权限,仍然无法在JNI层访问。
解决办法:
1.找到需要访问该内核节点的进程(process)我的是以system_server进程来访问
2.打开文件AndroidL/android/external/sepolicy/file_contexts.be
添加

/dev/hello    u:object_r:hello_device:s0 

3.打开文件AndroidL/android/external/sepolicy/device.te
将刚刚第二步写的hello_device声明为dev_type:

type hello_device, dev_type;  

4.AndroidL/android/external/sepolicy/目录下很多.te文件都是以进程名来结尾的,比如有针对surfaceflinger进程的surfaceflinger,有针对vold进程的vold.te,

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值