在上篇文章中,https://blog.csdn.net/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.csdn.net/xiaoxiangyuhai/article/details/76270294

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐