代码改变世界

Android深度探索(卷1)HAL与驱动开发 第九章 硬件抽象层:HAL 读书笔记

2016-07-03 17:12  sxauzzz  阅读(189)  评论(0编辑  收藏  举报

HAL是建立在Linux驱动之上的一套程序库。这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层。HAL的主要目的一个是用来保护"私人财产",另一个是尽量避免应用程序直接访问Linux驱动程序。

传统的Linux系统中Linux驱动一般有两种类型的代码,访问硬件寄存器和业务逻辑代码。对于访问硬件寄存器代码,并无秘密可言,因为都是调用Linux内核的标准函数进行的标准操作。而Linux的业务逻辑部分对于有些企业或者个人并不想讲源代码公开。Linux内核采用GPL协议,所以Linux驱动不得不公开源代码。GOOGLE在android的系统运行库层加上了HAL。由于它属于Android的一部分,所以不必开源。总而言之,HAL的作用如下:1.统一硬件的调用接口;2.解决了GPL版权问题;3.针对一些特殊的要求。

Android HAL 架构。基本原理是在Android系统中使用程序库(.so文件)调用位于内核空间的Linux驱动(一般通过设备文件访问)。然后Android应用程序(APK文件)可以通过NDK程序访问HAL中的程序库,或直接在Android应用程序中访问HAL中的程序库。新版本则在HAL模块中加了一些新的HAL架构要求的入口代码。

为LED驱动增加HAL。

1编写一款支持HAL的Linux驱动程序的步骤。一.编写Linux驱动。二.编写HAL library。三.编写service library。

2精简LED驱动

3测试读写寄存器操作

4编写调用LED驱动的HAL模块。编写HAL模块的步骤:一.定义结构体和宏。二.编写HAL模块的open函数。三.定义hw_module_method_t结构体变量。四.定义HAL_MODULE_INFO_SYM变量。五.编写HAL模块的close函数。六.编写控制LED的函数。

5编写调用HAL模块的service

6HAL模块的存放路径和命名规则

7编写调用service的java库

8测试LED驱动

软件1308班31号 张帆 博客园地址: http://home.cnblogs.com/u/sxauzzz/