第九章
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第九章相关的知识,希望对你有一定的参考价值。
HAL(硬件抽象层)是建立在驱动之上的一套程序库,是位于内核上的应用层。HAL主要目的是为了保护“私人财产”。Linux内核采用GPL协议,该协议要求所有使用者基于GPL协议的源代码必须开源,这对于某些公司和个人是不利的,从而衍生出HAL。将逻辑业务代码存储在HAL中,linux内核只保存与寄存器交换的代码,此时linux内核唯一的功能就是接受HAL传过来的数据,并将这些数据写入指定的linux寄存器中或从寄存器传到HAL。总之HAL的目的: 统一硬件的调用接口、解决GPl版权问题、针对一些特殊要求。android HAL构架经过几年的发展,已进化成了一个比较完善的架构。以LED驱动增加HAL为例子,实验步骤:1、编写linux驱动 2、编写HAL Library 3、编写Service library。对LED驱动添加HAL,需在LED驱动的基础上进行修改,去掉所有与读写寄存器相关的代码,只保留创建设备文件与寄存器交互的代码。其原理是指从寄存器读取或写入5个字节,第一个字节用于指定读写的动作以及寄存器类型。后四个字节是读写的实际数据。
在HAL模块中包含了LED驱动的所有业务逻辑,HAL模块也是普通的linux共享库,只不过HAL模块可以被Android系统自动装载。HAL可以自动调用,所以必须拥有一个标准接口,这个借口是个固定名称的结构体变量。编写HAL模块的步骤
1、定义结构体和宏 2、编写HAL模块的open函数 3、定义hw_module_methods_t结构体变量 4、定义HAL_MODULE_INFOSYM变量 5、编写HAL模块的close函数6、编写控制LED的函数 调用HAL模块设计一个非常重要hw_get_moudle函数。Android系统中用linux驱动有两种方式。一种是直接调用linux驱动,另一种是Android特有的,就是通过HAL模块。每一个HAL共享库制定一个I,在利用这个ID配合一定的规则找到linux共享库。这样linux共享库更换文件名,移动位置很方便。
以上是关于第九章的主要内容,如果未能解决你的问题,请参考以下文章