Android深度探索(卷一)HAL与驱动开发 第九章
通过学习Android深度探索(卷一)HAL与驱动开发的第九章让我知道了HAL硬件抽象层,为什么要在Android中加入HAL和Android HAL架构。
HAL是建立在Linux驱动之上的一套程序库。这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层,其主要目的除了尽量避免应用程序直接访问Linux驱动外,还有一个重要原因,那就是保护“私人财产”。
在传统的Linux系统中Linux驱动一般有两种类型的代码:访问硬件寄存器代码和业务逻辑代码。所以加入HAL的主要原因就是:1、统一硬件的调用接口,由于HAL有标准的调用接口,所以可以利用HAL屏蔽Linux驱动复杂、不统一的接口;2、解决了GPL版权问题,由于Linux内核基于GPL协议,而Android基于apache licence2.0协议,而HAL将原本位于Linux驱动中的敏感代码向上一了一个层次;3、针对一些特殊的要求,对于有些硬件,可能需要访问一些用户的空间资源,或在内核空间不方便完成的工作以及特殊需求,在这种情况下,可以利用位于用户空间的HAL代码来辅助Linux驱动完成一些工作。
HAL架构的基本原理就是在Android系统中使用程序库调用位于内核空间的Linux驱动,然后Android应用程序可以通过ndk程序访问HAL中的程序库,或直接在Android应用程序中访问HAL中的程序库。