HAL(硬件抽象层)是建立在Linux驱动之上的一套程序库。是属于Linux内核之上的应用层。传统的Linux系统中Linux驱动一般有两种:访问硬件寄存器的代码和业务逻辑代码。而HAL是位于Android的系统运行库层,采用Android licence2.0协议,就不必开源了。加入Hal的目的:(1)同意硬件的调用接口。(2)解决了GPL版权问题。(3)针对一些特殊的要求。HAL架构Android SDK和应用程序(APK)、NDK部分、Service程序库(.so)、HAL程序库(.so)(将.so文件隐藏起来)、Linux驱动程序。
编写支持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共享库。