Android Framework源码解读 - Audio - audioserver启动流程(2) - HIDL

本文详细介绍了Android 8.0引入的HIDL(硬件接口定义语言)如何解耦Framework与HAL,以音频服务为例,讲解了Passthrough HAL的工作原理,包括hidl-gen工具的使用、服务注册和启动流程,以及Binder通信在其中的作用。通过分析audio@2.0-service的启动和openDevice操作,揭示了如何通过Binder IPC通信加载音频硬件驱动。
摘要由CSDN通过智能技术生成

图片来自http://gityuan.com/2019/03/20/android_future/

Android 8.0系统(Android Oreo简称 Android O),Google开展了计划(Project Treble),为了解决Android 系统的碎片化问题和提高系统更新的效率,减少framework 和HAL 的耦合性,进而引出了HIDL 的概念。

Treble引入后,新增了一个vendor.img,即原先的system分区,被拆分为了system分区和vendor分区,SOC及供应商的功能实现都需要放到vendor分区,这样将system和vendor相关的镜像分开,便于能方便地更新和升级system,并且不依赖vendor等底层。

在Android 8.0之前,HAL是一个个的.so库,通过dlopen来进行打开,库和Android Framework位于同一个进程,具体如下图所示。

所以,Android Framework 与Android HAL被打包成一个system.img。Framework 与HAL是紧耦合的,通过link方式使用相应的硬件相关so库。

而Android 8.0引入HIDL,把Android Framework放在system.img分区,而Vendor HAL Implemetation放在新的分区vendor.img,这样刷新的system.img 就不会影响到Vendor HAL Implemetation。达到解耦的目的。

我们来看看官方的介绍:https://source.android.google.cn/devices/architecture/hidl-cpp

对于Android 8.0之前的设备,对应图①。 对于从之前的设备升级到8.0的版本,对应图②、图③。 对于直接基于Android 8.0开发的设备,对应图④。

Legacy HALs: 旧版本,Android 8.0开始不再维护 https://source.android.google.cn/devices/architecture/hal

通常代码里面会有相应的宏定义隔离 USE_LEGACY_XXX:  比如 USE_LEGACY_LOCAL_AUDIO_HAL,USE_LEGACY_PRESENTER  

也有对应的源码目录 legacy dirs: 比如./frameworks/av/media/libaaudio/src/legacy, ./kernel/drivers/usb/gadget/legacy  ./hardware/qcom/audio/legacy, ./hardware/rockchip/audio/legacy_hal  .....

Conventional HALs (传统HALs): deprecated in Android 8.0 .

HIDL HALs: Devices running Android 8.0 and higher must support HALs written in HIDL to adopt a new, more modular architecture.

HIDL全称为HAL interface definition language(发音为“hide-l”),分为两种模式:Passthrough(直通式)和Binderized(绑定式)。

为了兼容Android 8.0之前的版本,Android 8.0设计了Passthrough HAL,就是把传统或旧版的HALs做一层封装,所以不需要重新编写相关的HAL就能支持8.0架构。

所以接下来就继续用audio模块来看一下HIDL(Passthrough HAL)的框架。

Passthrough HIDL

以audio为例, 当编译./hardware/interfaces/audio/2.0 目录下的源码时候,会按如下规则生成对应的文件:

./hardware/interfaces/audio/2.0 目录下的源码编译后: 对应 ./out/target/product/px30_evb/system/lib/android.hardware.audio@2.0.so

./hardware/interfaces/audio/2.0/default 目录下的源码编译后: 对应 ./out/target/product/px30_evb/vendor/lib/hw/android.hardware.audio@2.0-impl.so

同时还会生成对应的可执行程序: ./out/target/product/px30_evb/vendor/bin/hw/android.hardware.audio@2.0-service 以及android.hardware.audio@2.0-service.rc文件,此文件会被拷贝到vendor.img里面的./ven

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值