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

    第九章------HAL 

    HAL是建立在Linux驱动之上的的程序库,他是一个应用层,它的作用保护内部私有。有一种是位于Android层次的系统运行库层,Linux中只保留与寄存器相互的代码,通过HAL进行数据的传递。

    Android加入HAL的主要目的是:

    统一硬件的调用接口。

    解决GPL版权问题。

    资源等特殊要求。

    这个是新版的Android HAL架构,与原来的区别增加了新的代码入口。他只需要用ID来定位,用Service程序库。

    LED实验中可以加入HAL,他不需要关心他们之间的交互方式,像普通的API就可以交互,将所有的逻辑从LED驱动移动到HAL模块,而先前的LED驱动只保留读写寄存器的功能。

    编写一款支持HALLinux驱动程序的步骤:

    1. 编写Linux驱动
    2. 编写HAL Library
    3. 编写Service Library

    新改进了以后的LEDbuild.sh的脚本可以支持多个设备,处理多个设备,而不需要每一次都去关闭Android模拟器。

    在测试读写寄存器时,因为是LED接受的不是字符串,而是字节类型的数据,因此以字节形式输入在进行测试即可。

    编写调用LED驱动的HAL模块

    HAL规定不能直接使用hw_module_t结构体,因此在外部还要加一层结构体,要使用led函数指针,定义打开和关闭的指针。设置文件的句柄,控制LED开关的通用函数,根据它的开关输出响应的日志信息,存储发送被设置文件或者从设备接收的数据,设置第一个字节为读取GPMDAT寄存器数据的状态,读取数据,保留有关数据。使用switch…case语句调用led;打开指定的ledled_off控制led,关闭设备函数;在初始化寄存器,打开设备为其分配内存空间,先清零,在设置。

    总结它的原理和步骤:

    1. 定义结构体和宏定义
    2. 编写HAL模块的open函数
    3. 定义he_module_methods结构体变量
    4. 定义HAL_MODULE_INFO_SYM变量
    5. 编写HAL模块的close函数
    6. 编写控制LED的函数

    Android系统中使用Linux驱动有两种方式:传统方式直接与Linux驱动交互,例如读取文件;还有就是HAL:本质上就是通过Linux共享库(.so)与Linux驱动交互,然后再访问Linux共享库。

  • 相关阅读:
    [转]如何有效运作知识库
    针式PKM如何帮助你解决个人知识管理中的常见问题?
    知识管理的目的是什么?如何进行知识管理?
    [转]阅读《讀書這玩意兒》有感&笔记
    [转]学习的三个层次
    小鱼干的做法
    IIS ERROR: Server Application Error 和 IIS与.NET Framework的安装顺序问题
    C#调用oracle存储过程 最简单的实例
    Oracle 中游标实例
    查看Sql Server是否有打SP4
  • 原文地址:https://www.cnblogs.com/qwhw/p/5638962.html
Copyright © 2011-2022 走看看