一.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