Android AOSP中Passthrough HAL的两种模式及Manifest配置疑问
Android HAL 模式相关疑问解答
一、Passthrough HAL为何支持两种运行模式?
你对两类HAL的理解没问题,这个设计是Android为了兼顾兼容和灵活部署做的:
- 兼容旧有实现:早期Android的HAL都是Passthrough模式(直接在进程内加载
.so库),不少硬件厂商的旧HAL代码没适配Binderized架构,保留Passthrough运行模式就能直接复用这些代码,不用全部重写。 - 适配不同场景需求:Binderized模式(跨进程,通过HwBinder通信)隔离性和稳定性更好,但有一定资源开销;Passthrough模式更轻量,适合对性能敏感、资源有限的设备(比如低功耗IoT设备)。让Passthrough HAL支持两种模式,厂商不用维护两套代码,就能根据硬件特性和系统需求选最优部署方案。
二、哪些HAL需要在manifest.xml中定义传输方式?
所有基于**HIDL(硬件接口定义语言)**实现的HAL,都需要在manifest.xml里通过<transport>标签指定传输方式:
- 若是Binderized HAL,必须写
<transport>hwbinder</transport>,明确使用跨进程的HwBinder通信机制。 - 若是Passthrough HAL,需要写
<transport arch="32+64">passthrough</transport>(arch字段可根据硬件架构调整,比如仅支持32位就写32),告知系统以进程内加载.so库的方式运行;如果要让Passthrough HAL以Binderized模式运行,也可以在这里指定hwbinder,系统会自动将其包装为跨进程服务。
简言之,只要是基于HIDL的HAL,不管属于Binderized还是Passthrough类型,都得在manifest里声明传输方式,系统靠这个配置来正确加载和管理HAL服务。
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

