在上篇文章中,https://blog.youkuaiyun.com/qq_35141454/article/details/102462971,让应用程序实现了对spi设备的读写。接着去尝试让引用程序去读写系统自带的i2c接口,在dev下,有两个i2c节点:i2c-2和i2c-3。
按照上篇文章所述去修改相应的te文件,编译内核报错,大概就是重定义了。于是我查看了i2c节点属性,
发现它已经是属于i2c_device设备了,那在系统中肯定有地方定义了这种类型,和device/qcom/sepolicy/common/device.te类似。于是我找到了定义此设备的两个te文件,
位置:system/sepolicy/device.te system/sepolicy/file_contexts
在system/sepolicy/device.te中定义到:
type i2c_device, dev_type;
在system/sepolicy/file_contexts中定义到:
/dev/i2c-[0-9]+ u:object_r:i2c_device:s0
那么接下来我们只需要修改device/qcom/sepolicy/common/untrusted_app.te就行了,
allow untrusted_app i2c_device:chr_file rw_file_perms;
编译烧写内核后,运行应用程序依然报avc权限错误。
经过排查,将system/sepolicy/device.te里i2c_device改成这样就行了
type i2c_device, dev_type, mlstrustedobject;
关于android selinux权限和解决办法可以参考:https://blog.youkuaiyun.com/xiaoxiangyuhai/article/details/76270294