文章简介
承接上一篇笔记,该份笔记是笔者深思熟虑后根据实战应用所总结出来的精华内容,该文章内容主要包括配置avc权限的使用场景以及其上下环节所需的准备。
使用场景
1.底层驱动有无配置好相应的串口
2.开启相应的selinux avc 权限
3.在framework层配置相应的 (config_serialPorts)
解决方法
三层配置
1.底层驱动有无配置好相应的串口
该部分主要是跟驱动相应的同事进行确认,如果没正常配置好相应的串口则会报错。
alps/device/mediatek/xxxxx/init.xxxxx.rc
+#hardware Decode Scanner
+ chmod 666 /dev/串口名
+ chown system radio /dev/串口名
+ chmod 666 /dev/串口名
+ chown system radio /dev/串口名
2.开启相应的selinux avc 权限
首先先确定好触发该节点所复现的触发场景,再到达指定场景打log进行查看缺少什么权限
adb logcat|findstr avc
例:
08-07 16:54:26.508 4071 4071 I com.tao.scan: type=1400 audit(0.0:122): avc: denied {read } for path="/dev/xxx" dev="tmpfs" ino=17514 ioctlcmd=0x5401 scontext=u:r:system_app:s0 tcontext=u:object_r:tty_device:s0 tclass=chr_file permissive=1
首先在底层根据tcontext中的内容确定其修改的.te文件路径,上文中的 tty_device
在下面路径下查询 grep -rn "tty_device" ./
mtk67xx_X0_mp1_dev/alps/device/mediatek/sepolicy/basic/non_plat
根据scontext锁定需要修改的文件例如上文中的 scontext=u:r:system_app 我们就找到相应的
system_app.te文件中进行添加。
添加准则:
allow + scontext + tcontext + : + tclass + { 权限 }
比如上文中的权限
allow system_app tty_device : chr_file { read };
配置好相应的权限后可能需要更新相应的api
source build/envsetup.sh
lunch XXX
make update-api
3.在framework层配置相应的 (config_serialPorts)
alps/frameworks/base/core/res/res/values/config.xml
<string-array translatable="false" name="config_serialPorts">
+ <item>"/dev/串口名"</item>
+ <item>"/dev/串口名"</item>
</string-array>
附加小知识
如果替换了某内置apk,则删除对应out即可,不需要全部out删除
find ./out/ -name "zhubao*" | xargs rm -rf
删除对应 out 其中 zhubao 为对应的模块名 可以到相应的 Android.mk文件中查到
LOCAL_MODULE 属性