HAL(硬件抽象层)是建立在Linux驱动之上的一套程序库。这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层。在传统的Linux系统中Linux驱动一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑代码。
编写一款支持HAL的Linux驱动程序的步骤:
第1步:编写Linux驱动
第2步:编写HAL Library
第3步:编写Service Library
在编写Linux驱动以及与驱动相关的程序的过程中应分为段测试每一部分程序,测试当然要从Linux驱动开始,每编写完一部分,应使用相应的方法进行测试,以便将当前编写的程序的Bug降到最低。任何被系统自动调用的程序都会有一个标准的接口,这个接口相当于一个约定的规则,不管任何程序,只要遵循这个规则,就可以成功被调用。既然HAL模块也可以被Android系统自动调用,那个自然也拥有类似main或init函数的接口,只不过这个接口不是函数,而是一个固定名称的结构体变量HAL_MODULE_INFO_SYM。也就是说HAL程序都必须有一个HAL_MODULE_INFO_SYM变量。
编写HAL模块的步骤
第1步:定义结构体和宏
第2步:编写HAL模块的open函数
第3步:定义hw_module_methods_t结构体变量
第4步:定义HAL_MODULS_INFO_SYN变量
第5步:编写HAL模块的close函数
第6步;编写控制LED的函数