在android中,与透传hidl相比,绑定化hidl有什么优势?
据我所知,hidl有两种方式(绑定方式(client / /server在不同的进程中)和通过方式(client hidl在同一进程中)。与直通方式相比,捆绑方式有什么优势?
我认为绑定化的方式比通过方式有更多的开销,因为绑定化的方式需要使用绑定器通信(RPC)。
为什么供应商要使用活页化的方式?
发布于 2019-07-25 03:57:49
绑定化的意味着您的服务是通过/dev/hwbinder提供的,并托管在单独的进程中。这允许它具有对硬件资源的独占访问权,并且仍然同时向多个客户端提供服务。
passthrough意味着您的服务通过共享库中的C++接口提供。这通常意味着只有一个客户端可以链接到它,或者服务必须以不需要独占访问硬件的方式实现。好处是节省了使用绑定器的通信开销。
你通常会使用绑定化的HAL,因为绑定器RPC开销非常小(比框架绑定器和AIDL更小)。
有一个need to be implemented in passthrough模式的HAL列表(出于性能原因)和一个need to be implemented in binderized模式的HAL列表。
发布于 2021-08-08 21:17:53
实际上,它比上面的答案更多,这有点不准确。"Binderized“实际上意味着服务是由服务器托管的,可以通过hwbinder访问,但它与排他性几乎没有关系(通过hals传递并不意味着这一点,实际上多个客户端可以与它们链接-排他性完全由内核驱动程序决定)。
作为Project Treble (Android8.0重构和迁移到/vendor,/product,/odm)的一部分,谷歌引入了绑定化硬件抽象层的概念,以确保没有供应商的硬件抽象层代码与AOSP代码混在一起。在此之前,无数次,易受攻击的供应商代码在system_server的上下文中执行,他拥有system_server拥有安卓(即完全和彻底的系统妥协)。
使用绑定化的HAL会带来相同的麻烦开销(实际上与框架绑定器和AIDL相同),但允许完全分离供应商代码。供应商代码不能再访问AOSP服务-即供应商守护程序可以打开/dev/vndbinder,但不能打开/dev/binder -这意味着即使它们被攻破,也有更多机会受到遏制,防止恶意代码攻击AOSP服务。
Passthrough HALs绝对更好,性能也更好--但被谷歌明确反对(除了android.hardware.graphics.mapper,可能还有一两个我现在还不知道)。作为过渡期的一部分,它们被允许在8.0中使用,这样就不会对供应商造成太大的冲击。在这一点上(11.0,12b3),它们在Android上是不允许的(根据CTS,尽管供应商仍然可以无视这一点)
https://stackoverflow.com/questions/54394257
复制相似问题