zoukankan      html  css  js  c++  java
  • 第九章

    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共享库更换文件名,移动位置很方便。

  • 相关阅读:
    利用Oracle创建数据库
    安装Oracle 10g
    安装ArcGIS Engine 9.3
    安装ArcGIS Desktop 9.3
    绘制扇形效果线条小Bug解决
    MFC画线功能总结
    MFC消息映射机制以及画线功能实现
    truncate
    postgresql死锁处理
    python编程中的if __name__ == 'main': 的作用
  • 原文地址:https://www.cnblogs.com/1310-09/p/5638451.html
Copyright © 2011-2022 走看看