前言
Android HAL是Hardware Abstract Layer的缩写,顾名思义,就是硬件抽象层的意思,为什么要搞这么个东西呢,大概是以下原因吧:
软件设计的角度
抽象层概念是很多软件在设计时都采用的一种设计方法,可以达到抽象和隔离上下层的目的,这样子下层实现变化时,上层逻辑不用改动,这种设计方法在很多开源软件上都可以看到,比如Linux内核的vfs、minigui的gal和ial、ffmpeg、opengl等。
版权方面
Android基于Linux内核实现,Linux是GPL许可,即对源码的修改都必须开源,而Android是ASL许可,即可以随意使用源码,无需开源,因此将原本应该位于Linux内核的硬件驱动逻辑转移到Android平台来,就可以不必开源,从而保护了厂家的利益。因此Android就提供了一套访问硬件抽象层动态库的接口,各厂商在Android的硬件抽象层实现特定硬件的操作细节,并编译成so库,以库的形式提供给用户使用。
Android HAL支持以下模块: