当前位置: 首页 > 科技观察

Android硬件通信HIDL介绍

时间:2023-03-16 13:07:54 科技观察

1.前言HIDL全称是HALinterfacedefinitionlanguage(硬件抽象层接口定义语言),是AndroidFramework与AndroidHAL之间的接口。HIDL旨在用于进程间通信(IPC),进程间通信采用Binder机制;AndroidO(8.0)版本之后,底层实现发生了比较大的变化,其中最引人注目的就是HIDL机制的全面实现。今天我们介绍一下。2.HIDL设计目的AndroidO(8.0)之前的系统升级涉及多方协作,极其麻烦。引入HIDL机制是为了将framework和hal层分离,这样framework部分可以直接覆盖更新,而不用重新更新HAL。编译,以便在系统升级时,OEM厂商跳过SoC厂商,先升级框架。在2.1和8.0之前,framework和hal是紧耦合的,存在于system.img中。因此,在升级版本时,需要:OEM厂商适配framework,SoC厂商适配hal,然后将改动打包到system.img中,生成OTA升级包。推送到手机OTA升级2.2和8.0。framework和hal解耦后,framework存在于system.img中,hal存在于vendor.img中。版本升级时,分为两种升级:框架升级:OEM厂商适配框架,将修改打包到system.img,生成OTA升级包,推送到手机进行OTA升级(框架变了,但hal层没有改变)。hal升级:SoC厂商适配hal,将修改打包到vendor.img,生成OTA升级包,推送到手机上进行OTA升级(框架变更,hal层变更)。3.HIDL机制演进3.1旧版本Framework与HAL通信框架在旧版本系统架构中,AndroidFramework层和Hal层被封装成一个system.img,Framework和hal层紧耦合,通过链接方式使用对应的硬件so库。它们之间的架构一般有以下两种方式:3.2HIDL类型引入为了解决两者紧耦合带来的弊端,google引入了HIDL来定义Framework和HAL之间的接口,可以使用如下描述:事实上,虽然谷歌推出了这一机制,但很多厂商并没有很快跟上步伐。因此,为了向前兼容,Google定义了三种类型:①是之前TrebleProject使用的实现架构,使用传统HAL和oldHAL②passthroughmode,passthroughmode。如图所示,Framework和HAL层工作在同一个进程中。下面的HAL是用HIDL封装的库,是直通式HAL。这些库文件也可以用于③绑定模式③绑定模式、binderized模式。它是直通式HAL绑定器,成为绑定HAL。Framework和HAL层工作在不同进程,通过Binder进行IPC4纯绑定。与③相比,boundHAL不包含直通HAL,所以称为纯binding。以上可以归纳如下: