zoukankan      html  css  js  c++  java
  • 第9章:硬件抽象层HAL

    第9章:硬件抽象层HAL

    1.HAL ( Hardware Abstraction Layer,硬件抽象层) 是建立在Linux驱动之上的一套翻字库。这套程序库并不属于 Linux 内核, 而是属于 Linux 内核层之上的应用层。

    2.编写一款支持 HAL 的 Linux 驱动程序的步骤

    编写一款支持 HAL 的 Linux 驱动程序要比编写普通的 Linux 驱动程序复杂一些,加入HAL 会使组成 Linux 驱动的一整套 Library 的各部分更独立,更容易维护。

    第 1 步:编写 Linux 驱动

      “编写 Linux 驱动”,从表明上看是废话,但如果要为 Linux 驱动添加 HAL,而且想尽量保护敏感数据。 Linux 驱动的代码就要尽量简洁,尽可能将业务逻辑放到 HALLibrary 中。 第 2 步:编写 HAL Library

       HAL Library 就是普通的 Linux Library (*.so )文件。但这类库文件有一个接口。通过 HAL _MODULE_INFO _ SYM 变量实现。 Service Library 就是通过在这个接口中定义的 ID 定位 HAL Library 的。

    第 3 步:编写 Service Library

    Service Library 也是 Linux Library。 这一步比较灵活。 Service Library 可以是一般的 Linux Library,也可以是别I Library。在本章的 LED 驱动例子中将 Service Library和JNI Library 合到了一起。也就是说, Service Library就是JNI Library. 实际上这一步除了用 C/C++实现的*.so 库文件外,还应该包含一个用 Java 编写的服务管理类 ( ServiceManager)。 ServiceManager会调用 Service Library。而 APK 程序会调用 ServiceManager类来访问 Service Library。

    3.编写调用LED驱动的HAL模块

    编写HAL模块的步骤和原理如下。

    第1步:定义结构体和宏

    第2步:编写HAL模块的 open 函数

    第3步:定义 hw_ module _methods_ t 结构体变量

    第4步:定义 HAL_MODULE_INFO_SYM 变量

    第5步:编写 HAL模块的 close 函数

    第6步:编写控制 LED 的函数

    4.编写调用 HAL 模缺的 Service

    5.编写调用 Service 的 Java 库

    其实到现在为止基于HAL的LED驱动已经编写完成了,可以在Android应用程序中通过NDK 调用前面实现的Service程序库。 但为了使程序更易于使用, 可以将调用Service程序库的Java 类单独封装在jar文件中,这样做任何的Android应用程序中只要引用了这个阳文件就可以向调用普通Java类一样访问LED驱动了。

    在Android系统中使用Linux.驱动有两种方式。 一种就是通过传统的方式直接与 Linux 驱动交互。例如,直接读写设备文件的数据。另外一种是Android特有的,就是通过HAL 模块,HAL模块本质上就是通过Linux共享库(.so)与Linux驱动交互,然后应用程序再访问Linux共享库。早期的 HAL 模块由应用程序直接按访问 Linux 共字库的方式调用。而高版本的Android系统为HAL添加了Stub。换句话说,就是为每一个HAL共享库指定一个ID,再利用这个ID配合一定的规则找到Linux共享库。这样 Linux 共享库更换文件名,移动位置都很方便(因为 HAL 共享库的路径和文件名都不是定死的)。

  • 相关阅读:
    查询已存入数据库中的图片,并显示出来
    图像插值的缺点
    windows网络服务之配置网络负载均衡(NLB)群集
    QR 码的位置检测符
    二维条码识别系统设计原理
    教你看懂Code128条形码
    DataMatrix二维条码源码分析检测识别图像位置
    C#条形码生成(五)----Web下的测试
    C# 生产成条形码3种方法
    屏蔽弹出对话框
  • 原文地址:https://www.cnblogs.com/feng719/p/5644480.html
Copyright © 2011-2022 走看看