Android深度探索--HAL与驱动开发第九章读后感

硬件的抽象层HAL,HAL是建立在linux驱动上的一套程序库,不属于linux内核,属于linux内核层之上的应用层,对传统的linux系统中linux驱动一般有两类型的代码:访问硬件寄存器的代码和业务逻辑的代码。

编写一个支持HAL的Linux驱动程序的主要步骤如下:

(1)编写Linux 驱动。 “编写Linux 驱动”,为linux 驱动添加HAL,而且想尽量保护敏感数据,Linux 驱动的代码就要尽量简洁,尽可能将业务逻辑放到HAL Library 中。

(2)编写HAL Library 。它就是普通的Linux Library(*.so )文件。但这类库文件有一个接口,通过HAL MODULE_INFO SYM 变量实现,Service Library 就是通过在这个接口中定义的ID 定位HALLibrary的。

(3)编写Service Library。这一步比较灵活,Service Library 可以是一般的Linux Library,也可以是JNI Library。

编写HAL模块的步骤和原理如下。

第一步:定义结构体和宏 编写HAL模块需要使用到3个非常重要的结构体,在第一步需要定义两个新的结构体。

第二步:编写HAL模块的open函数 open函数是HAL模块的入口点。本例中使用的是led_device_open函数。该函数主要做如下三个工作。初始化hw_device_t的子结构体。 打开设备文件。 初始化寄存器。

第三步:定义hw_module_methhods_t 结构体变量

第四步:定义HAL_MODULE_INFO_SYM函数

第五步:编写HAL模块的close 函数 当HAL模块被卸载后会调用close函数

第六步:编写控制LED的函数

在Android系统中使用Linux驱动有两种方式,一种就是通过传统的方式直接与Linux驱动交互,如直接读写设备文件的数据。另外一种是Android特有的,就是通过HAL模块。HAL模块本质上就是通过Linux共享库与Linux驱动交互,然后应用程序再访问Linux共享库。

原文地址:https://www.cnblogs.com/cui8171/p/5641037.html