第九章硬件抽象层

HAL(硬件抽象层)是建立在linux驱动之上的一套程序库。这套程序库不属于linux内核,而是Linux内核之上的应用层。

加入HAL的主要目的:

1、统一硬件的调用接口。由于HAL标准的调用接口,所以可以利用HAL屏蔽linux驱动复杂、不统一的接口。

2、解决了GPL版权问题。由于linux内核基于GPL协议,而Android基于Apache Licence2.0协议。因此,将原本位于linux驱动中的敏感代码向上移了一个层次。这样这些敏感代码就包脱了GPL协议的束缚,那些不想开源的linux驱动作者就没必要开源了。

3、针对一些特殊的要求。对于有些硬件,可能需要访问一些用户空间的资源,或在内核控件不方便完成的工作以及特殊的需求。在这种情况下,可以利用位于用户空间的HAL代码来辅助linux驱动完成一些工作。

LED驱动增加HAL

编写支持HALlinux驱动程序的步骤:

1、编写linux驱动:linux的驱动代码要尽量简洁,尽可能将业务逻辑放到HAL Library中。

2、编写HAL LibraryHAL Library就是普通的Linux library*.so)文件。但这类库文件中有一个接口。通过HAL_MODULE_INFO_SYM变量实现。Service library就是通过这个接口中定义的ID定位HAL Library

3、编写Service Library

编写HAL的步骤:

1、定义结构体和宏

2、编写HAL模块的open函数

3、定义hw_module_methods_t结构体变量

4、定义HAL_MODULE_INFO_SYM变量

5、编写HAL模块的close函数

6、编写控制LED的函数

posted @ 2016-07-07 19:50  BJBLOG  阅读(227)  评论(0编辑  收藏  举报