充电指示灯控制中SELinux权限问题

抄男友学习总结,核心问题是

学习博客https://blog.csdn.net/wds1181977/article/details/54967110得以知道缘由。

 

最近在做一个充电指示灯的需求,有一个Selinux权限的控制一直绕了好久才解决,解决记录如下:

驱动那边给我提供的操作LED灯的节点文件路径如下:

/sys/class/leds/mt6370_pmu_led1/brightness

我这边直接在LightServices里面去操作这个节点的时候,LED灯没有反应,查看mtklog之后发现有如下这个Log

08-06 05:20:03.509690  1037  1037 D LightsService: switch red led state = 1
08-06 05:20:03.507000  1037  1037 W system_server: type=1400 audit(0.0:274): avc: denied { write } for name="brightness" dev="sysfs" ino=24764 scontext=u:r:system_server:s0 tcontext=u:object_r:sysfs:s0 tclass=file permissive=0
08-06 05:20:03.509894  1037  1037 E LightsService: red : open /sys/devices/platform/11016000.i2c5/i2c-5/5-0034/mt6370_pmu_rgbled/leds/mt6370_pmu_led4/brightness failed
08-06 05:20:03.509964  1037  1037 D LightsService: can not write 1 for red led

通过查看这个Log发现是因为Android里面的Selinux权限在控制这个节点文件不能被访问,通过adb shell setenforce 0 这个命令也可以验证是Selinux权限的问题,由于这个设备节点是sysfs类型的(dev="sysfs"),所以我们不能按照普通的添加权限那样添加,这个添加权限的步骤如下:

(1)在device/mediatek/sepolicy/basic/non_plat/file_context文件里面,先对这个文件进行一个申明如下

/sys/class/leds/mt6370_pmu_led4/brightness u:object_r:blue_led_file:s0

(2)在device/mediatek/sepolicy/basic/non_plat/file.te文件里面再进行一下类型定义

type red_led_file, fs_type, sysfs_type;

(3)再去相应的te文件里面添加缺少的权限

scontext=u:r:system_server:s0这里提示是system_server.te文件缺少权限,所以我们需要在这只文件里面添加权限

device/mediatek/sepolicy/basic/non_plat/system_server.te

allow system_server red_led_file:file { read open write };

这个添加可以参考FAQ:

https://online.mediatek.com/FAQ#/SW/FAQ21268

添加完成之后,编译出来的软件还是没有效果,输出的Log还是报一样的权限问题,软件编译没有问题,确认还是添加没有效果

通过adb命令进入sys/class/leds这个目录下用ls -l发现

/sys/class/leds/mt6370_pmu_led4/brightness这只文件只是另外一个文件的快捷方式,我们对快捷方式文件操作也就没有效果了,所以我们需要操作这个快捷文件的源文件

sys/devices/platform/11016000.i2c5/i2c-5/5-0034/mt6370_pmu_rgbled/leds/mt6370_pmu_led4/brightness

我这边就把我操作的设备节点换成了这只文件,然后权限按照上面的步骤再添加一下就OK了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值