Linux设备节点打开失败,关于从android服务中打开linux设备节点没有权限的问题(seplicy-selinux)...

关于从android服务中打开linux设备节点没有权限的问题(sepolicy/selinux)

tags: android linux driver

自己创建一个设备节点,/dev/xxx,然后想在android的内核某个位置去打开这个设备,结果碰到permition denied这个问题,开始以为是设备节点的读写权限,但是修改了读写权限后还是不行,最后发现还要设备android的sepolicy,这里简单记录一下过程。

1 修改文件权限

/out/target/product/xxxxxxx/root/ueventd.rc

该脚本在启动的时候自动运行,然后会设置对应文件的权限,例如:

# ueventd can only set permissions on device nodes and their associated

# sysfs attributes, not on arbitrary paths.

#

# format for /dev rules: devname mode uid gid

# format for /sys rules: nodename attr mode uid gid

# shortcut: "mtd@NN" expands to "/dev/mtd/mtdNN"

/dev/null 0666 root root

/dev/zero 0666 root root

/dev/full 0666 root root

/dev/ptmx 0666 root root

/dev/tty 0666 root root

/dev/random 0666 root root

/dev/urandom 0666 root root

2 修改sepolicy设置

设置方法见此blog

这篇blog从中间“01设备节点(或bin文件);02file_contexts;03device.te;04进程文件添加权限;”这个地方看起就行了……也就是里面的四个步骤。

这里需要记录三点:

关于路径,在android7.x里面,sepolicy文件夹是在/system目录下

关于如何获取服务的线程id,可以在该服务中用getpid()函数获取

关于编译,其实不用像上面那个blog里面说的那样全部重新编译,只用mmm /system/sepolicy,然后会更新/out/target/product/xxxxxxx/root/sepolicy文件,这个时候要重新打包bootimage,所以接着make -j4 bootimage,保险起见的话make snod一下,然后把system.img和boot.img重新烧一下(我这里ramdisk.img也被更新了,保险起见把这个也重新烧一下)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值