与直通相比,粘合剂的hidl有什么优势?

时间:2019-01-28 00:42:09

标签: android android-source hal

在android中,与直通hidl相比,粘合剂化hidl有什么优势?

据我所知,有两种隐藏方式(绑定方式(客户端/服务器在单独的进程中),直通方式(客户端/服务器在同一进程中)。 与通过方式相比,装订方式的优势是什么?

我认为绑定方式比传递方式有更多开销,因为绑定方式需要使用绑定器通信(RPC)。

为什么供应商使用粘合剂方式?

2 个答案:

答案 0 :(得分:0)

已绑定意味着您的服务是通过/dev/hwbinder提供的,并在单独的进程中托管。这样一来,它就可以独占访问硬件资源,并且仍然可以一次向多个客户端提供服务。

传递表示您的服务是通过共享库中的C ++接口提供的。这通常意味着只有一个客户端可以链接到它,或者必须以不需要独占访问硬件的方式来实现服务。这样做的好处是可以节省使用Binder的通信开销。

您通常会使用绑定的HAL,因为Binder RPC的开销确实很小(比使用框架Binder和AIDL的开销小)。

有一个need to be implemented in passthrough模式的HAL列表(出于性能原因),还有一个need to be implemented in binderized模式的HAL列表。

答案 1 :(得分:0)

实际上比上面的答案更多,这有点不准确。 “绑定”确实意味着该服务由服务器托管,可通过 hwbinder 访问,但它与排他性无关(直通 hals 并不意味着,实际上多个客户端可以与它们链接 - 排他性仅在内核驱动自行决定)。

作为 Project Treble(Android 8.0 重构并迁移到 /vendor、/product、/odm)的一部分,Google 引入了 Binderized HAL 的概念,以确保没有供应商 HAL 代码与 AOSP 代码混合。在此之前无数次,易受攻击的供应商代码在 system_server 的上下文中执行,并且他拥有 system_server 拥有 Android(即完全彻底的系统妥协)。

使用绑定式 HAL 会产生同样令人讨厌的开销(实际上与框架绑定程序和 AIDL 大致相同),但允许完全分离供应商代码。供应商代码无法再访问 AOSP 服务——也就是说,供应商守护进程可以打开 /dev/vndbinder ,但不能打开 /dev/binder——这意味着即使它们受到威胁,也有更多的机会被遏制,防止恶意代码攻击 AOSP 服务.

直通 HAL 肯定更好,性能也更高——但谷歌明确弃用(除了 android.hardware.graphics.mapper 和目前我还没有想到的一两个)。作为过渡期的一部分,它们被允许在 8.0 中使用,以免“震惊”供应商太多。在这一点上 (11.0, 12b3),它们在 Android 上是不允许的(根据 CTS,尽管供应商仍然可以无视这一点)