android 8.1添加HIDL小记

本文详细解析了HIDL(Hardware Interface Definition Language)的编译流程中遇到的常见错误及其解决方案,包括Android.bp依赖问题和SELinux权限配置。通过实际案例,指导如何修改Android.bp以解决依赖缺失问题,以及如何添加SELinux规则以确保HIDL服务正常运行。
摘要由CSDN通过智能技术生成

主要参考文章:
HIDL最全编译流程:https://blog.csdn.net/u013357557/article/details/84561652
谷歌文档:https://source.android.google.cn/devices/architecture/hidl-cpp

解决:ninja: error: unknown target ‘MODULES-IN-hardware-libhardware-modules-XXXX’

用Android.bp编译,如果提示这个错误,需要修改一下顶层的Android.bp,加入当初目录路径即可。或者顶层用的是Android.mk,这就需要把它改成Android.bp。

解决Android.bp的依赖问题

编译输出错误:

echo "module android.hardware.xxx.xx@1.0-impl missing dependencies: libhw_zzz_zzz" && false
module android.hardware.xxx.xx@1.0-impl missing dependencies: libhw_zzz_zzz

找了好久,明明已经libhw_zzz_zzz这个模块已经编译完成了,并且out目录下都能找到,为什么会提示依赖缺失呢?后来发现问题原因:在Android.bp中定义的模块在Android.mk中可以依赖,但是Android.bp中的模块不能依赖Android.mk中的模块。 把被依赖模块改成bp编译后,错误消失。

Selinux 添加tee规则

在写完hidl的接口之后,烧录系统,ps看到hidl的sevice已经启动。写了个测试程序测试接口功能,但是在运行测试程序时,会卡住没有反应,logcat输出以下信息:

07-08 08:58:35.527   236   236 E SELinux : avc:  denied  { find } for interface=android.hardware.xx::xxx pid=1667 scontext=u:r:sudaemon:s0 tcontext=u:object_r:default_android_hwservice:s0 tcl
ass=hwservice_manager permissive=1
07-08 08:58:36.535  1667  1667 W /mnt/usb/xxxx: Waited one second for android.hardware.xx@1.0::xxx/default. Waiting another...

可以看到是SELinux的权限问题,查看google文档,有如下说明:
供应商分区中包含下面几个库。请让这些库从 coredomain 和非 coredomain 都可访问。
VNDK-SP-Ext,位于 /vendor/lib[64]/vndk-sp
SP-HAL,位于 /vendor/lib[64] 或 /vendor/lib[64]/hw
SP-HAL-Dep,位于 /vendor/lib[64] 或 /vendor/lib[64]/hw
将这些文件明确标记为 same_process_hal_file,因为在默认情况下,从 coredomain 无法访问 vendor 分区中的任何内容。请向供应商专用的 file_contexts 文件中添加类似下面的代码行。
/vendor/lib(64)?/hw/libMySpHal.so u:object_r:same_process_hal_file:s0
/vendor/lib(64)?/vndk-sp/libBase.so u:object_r:same_process_hal_file:s0
/vendor/lib(64)?/libBaseInternal.so u:object_r:same_process_hal_file:s0

于是开始添加hidl的tee规则。
有蛮多地方需要添加的,这里懒得讲了,可以参考tee文件里面已经添加好的规则来逐一添加。
添加完可以正常运行之行,可以用audit2allow来解决一些avc的内核打印,方法百度上有很多。
这篇写得烂尾了…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值