第九章 硬件抽象层:HAL
2016-07-03 16:44 weiboke 阅读(239) 评论(0) 编辑 收藏 举报第九章 硬件抽象层:HAL
HAL是建立在Linux驱动之上的一套程序库。是属于Linux内核之上的应用层。
第一部分讲为什么要在Android中加入HAL,传统的Linux系统中Linux驱动一般有两种:访问硬件寄存器的代码和业务逻辑代码。而HAL是位于Android的系统运行库层,采用Android licence2.0协议,就不必开源了。加入Hal的目的:(1)统一硬件的调用接口。(2)解决了GPL版权问题。(3)针对一些特殊的要求。HAL架构Android SDK和应用程序(APK)、NDK部分、Service程序库(.so)、HAL程序库(.so)(将.so文件隐藏起来)、Linux驱动程序。
第三部分写为LED驱动增加HAL, 编写支持HAL的Linux驱动程序的步骤:(1)编写Linux驱动。(2)编写HAL library(即普通的Linux library(*.so)文件)。(3)编写service library。
编译和安装Led驱动sh build.sh。rwdev:命令行程序。<r|w>:读或写命令。〈dev_file〉:设备文件名。〈byte_count〉:写入或读取的字节数。<byte1>:写入的字节。HAL输入Android的一部分,在编译HAL模块之前需要Android源代码。Leds_hal.h头文件用于定义结果体、宏和引用一些系统的头文件。
编写HAL模块的步骤:1.定义结构体和宏。2.编写HAL模块的open函数。3.定义hw_module_methods_t结构体变量。4.定义HAL_HODILE_INFO_SYM变量.5.编写HAL模块的close函数。6.编写控制LED的函数。
编写调用HAL模块的Service。HAL模块库文件的存放路径:/sysrem/lib/hw和/vendor/lib/hw。HAL模块库文件的命名规则是ID.suffix.so。编写调用Service的java库。之后进行LED驱动的测试。
在Android系统中使用Linux驱动的两种方式:1.直接与Linux驱动交互。2.通过HAL模块。HAL模块本质上就是通过Linux共享库(.so)与Linux驱动交互,然后应用程序在访问Linux共享库。
这一章的内容不是太难,但是对于理解Android硬件抽象层由很大的帮助,通过本章的学习使我对Android有了更深的理解。
博客园地址:http://www.cnblogs.com/j-wei