第九章

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

二.Android HAL架构的发展:1、在Android系统中使用程序库(.so文件)调用位于内核空间的linux驱动。然后Android应用程序(APK文件)可以通过NDK程序访问HAL中的额程序库,或直接在Android应用程序中访问HAL中的程序库。

三编写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驱动

四.编写一款支持HAL 的Linux 驱动程序的步骤 

第1 步 编写Linux 驱动  “编写Linux 驱动”,从表明上看是废话,但如果要为linux 驱动添加HAL,而且想尽量保护敏感数据。Linux 驱动的代码就要尽量简洁,尽可能将业务逻辑放到HAL Library 中。 

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

第3 步:编写Service Library  尽管这步并不是必需的,但新的HAL 架构要求我们这样做。Service Library 也是Linux Library 。这一步比较灵活。Service Library 可以是一般的Linux Library,也可以是JNI Library。

五.编写调用LED驱动的HAL模块的步骤:

1、定义结构体和宏

2、编写HAL模块的open函数

3、定义hw_module_methods_t结构体变量

4、定义HAL_MODULE_INFO_SYM变量

5、编写HAL模块的close函数

6、编写控制LED的函数

http://i.cnblogs.com/EditPosts.aspx?opt=1

原文地址:https://www.cnblogs.com/zhangyuye/p/5650737.html