Android的Hidl接口及Hal层的加载

HAL与HIDL简介

什么是HAL?

HAL硬件抽象层(Hardware Abstraction Layer),是谷歌开发的用于屏蔽底层硬件抽象出来的一个软件层

每一个平台厂商可以将不开源的的代码封装在HAL层,仅提供二进制文件(so库文件,通过dlopen函数接口加载);

 

HIDL

(1)什么是HIDL?

HIDL(HAL Interface Description Language),是一种自定义语言,指定 HAL 和其用户之间的接口的一种接口描述语言 (IDL)。

HIDL其核心是接口的定义,而谷歌为了使开发者将注意力落在接口的定义上而不是机制的实现上,主动封装了HIDL机制的实现细节,开发者只需要通过*.hal文件定义接口,填充接口内部实际的实现即可;

(2)HIDL的存在的目的(解耦)?

HIDL 允许指定收集到接口和软件包的类型和方法调用

HIDL 旨在用于进程间通信 (IPC)

HIDL 存在的目的是,可以在无需重新构建 HAL 的情况下替换HAL层以上的框架

HAL 将由供应商或 SOC 制造商构建,并放置在设备的 /vendor 分区中;

这样就可以在system分区中通过 OTA 替换框架,而无需重新编译 HAL。

 

HIDL接口文件位于AOSP中的四个不同位置:

1.https://www.androidos.net.cn/android/10.0.0_r6/xref/hardware/interfaces

2.https://www.androidos.net.cn/android/10.0.0_r6/xref/frameworks/hardware/interfaces

3.https://www.androidos.net.cn/android/10.0.0_r6/xref/system/hardware/interfaces

4.https://www.androidos.net.cn/android/10.0.0_r6/xref/system/libhidl/transport

 

以指纹为例:

http://androidxref.com/9.0.0_r3/xref/hardware/interfaces/biometrics/fingerprint/2.1/IBiometricsFingerprint.hal

http://androidxref.com/9.0.0_r3/xref/hardware/interfaces/biometrics/fingerprint/2.1/IBiometricsFingerprintClientCallback.hal

http://androidxref.com/9.0.0_r3/xref/hardware/interfaces/biometrics/fingerprint/2.1/types.hal

 

HAL层如何实现?

以指纹为例:

从Android O开始(安卓官网上可以搜索到“Android Treble"相关的论文),新引入/dev/hwbinder接口使用HIDL语言,文件后缀名为.hal。

 FingerprintService.java是通过hwbinder(新的HIDL语言)与HAL层也的BiometricsFingerprint.cpp通信。

FingerprintService.java->BiometricsFingerprint.cpp->fingerprint.c->IC厂商自实现HAL(具体实现android源码中提供的方法)->IC厂商提供的CA--------IC厂商提供的TA(TEE,不同的平台有不同的方案,例如高通是QTEE)

IC厂商自实现HAL(具体实现android源码中提供的方法)->IC厂商提供的CA--------IC厂商提供的TA(TEE)涉及到驱动的集成与调试。

 

HAL层如何加载?

Google在HAL层定义了一套通用标准接口,平台厂商都遵守该规则定义自己的Module:

  • 每一个硬件都通过hw_module_t来描述,具有固定的名字HMI(Hardware Module Info)
  • 每一个硬件都必须实现hw_module_t里面的open方法,用于
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值