硬件抽象层:HAL

硬件抽象层:HAL

HAL(硬件抽象层)是建立在Linux驱动之上的一套程序库。这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层。Google为Android增加HAL的主要目的除了尽量避免应用程序直接访问Linux驱动外,还有一个重要原因,那就是保护“私人财产”。

在传统的Linux系统中Linux驱动一般有两种类型:访问硬件寄存器的代码和业务逻辑代码。对于访问硬件寄存器的代码,并没有什么秘密可言,因为这都是调用的Linux内核的标准函数进行的标准操作。Google为了满足这些不想开源的Linux驱动作者的要求,在Android层次结构中的系统运行库层增加了一个HAL。Google为Android加入HAL主要的目的:统一硬件的调用接口;解决了GPL版权问题;针对一些特殊的要求。

Android HAL架构比较简单,其基本原理就是在Android系统中使用程序库调用位于内核空间的Linux驱动。然后Android应用程序可以通过NDK程序访问HAL中的程序库,或直接在Android应用程序中访问HAL中的程序库。

编写HAL模块的步骤和原理:定义结构体和宏;编写HAL模块的open函数;定义hw_module_methods_t结构体变量;定义HAL_MODULE_INFO_SYM变量;编写HAL模块的close函数;编写控制LED的函数。

在Android系统中使用Linux驱动有两种方式:一种是通过传统的方式直接与Linux驱动交互;另一种是Android特有的,就是通过HAL模块。

posted @ 2016-07-07 19:46  dsdw  阅读(203)  评论(0编辑  收藏  举报