zoukankan      html  css  js  c++  java
  • Android深度探索--HAL与驱动开发----第九章读书笔记

    第九章  硬件抽象层:HAL

    9.1为什么要在安卓中加入HAL?

    首先Google 为 Android 增加 HAL 的主要目的除了尽量避免应用程序直接访问 Linux 驱动外,还有一仓重要原因,那就是保护 “私人财产”。-对于

    那些既想发布茬子·Android,的 Linux 驱动程序,又不想将核心业务逻辑公开的企业或个人, ~简直就是福音。

     HAL 并不是Linux 内核的一部分,而是位于Android的系统运行库层,尽管这些 Linux.驱动都是免费给用户’使用的,但是由于这些Linux 驱动的实现涉及一些,技术专利或商业秘密,如果公开源代码会有很大麻烦。但作为Linux.驱动,又不得不公开源代码。这是由于 Linux 内核采用了 GPL 协议,而 GPL协议要求所有使用基于 GPL 协议的源代码的程序必须开源(由于 Linux 驱动属于 Linux 内核的一部分,因此 Linux 驱动必须开源)。

    总而言之,Google 为 Android 增加 HAL 的主要目的:

     1.统一硬件的调用接口。由于HAL 有标准的调用接口,所以可以利用 HAL屏蔽Linux 驱动复杂,不统一的接口。

    2.解决了GP(版权问题。由于 Linux 内核基于GPL协议,而 Android 基于 Apache Licence 2 ..0、协议.因此 Google 玩了个“穿越飞将原本位于 Linux驱动中的敏感代码向上移了一个层次二这样这些敏感代码就摆脱了 GPL 协议的束缚,。那些不想开源的 Linux驱动作者也就没必要开源了。

    3.针对一些特殊的要求。对于有些硬件,可能需要访问→些用户空间的资源,或在内核空间不方便完成的工作以及特殊需求。在这种情况下,可以利用位于用户空间的HAL 代码来辅助 Linux驱动完成一些工作。

    9.3为LED驱动增加 HAL

    9.3.1 编写一款支持 HAL 的 Linux 驱动程序的步骤编写一款支持 HAL 的 Linux 驱i.9J.程序要比编写普通的 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

     尽管这步并不是必需的,但新的 HAL 架构要求我们这样做。 Service Library 也是 Linux Library。这一步比较灵活。 Service Library 可以是一般的 Linux Library,也可以是别I Library。在本章的 LED 驱动例子中将 Service Libratγ 和刑I Library 合到了一起。也就是说, Service Library 就是 JNI Library.实际上这一步除了用 CIC件实现的*.so 库文件外,还应该包含一个用 Java 编写的服务管理类( ServiceManager)。 ServiceManager 会调用 Service Library。而 APK 程序会调用 ServiceManager 类米访问 Service Library。

     http://www.cnblogs.com/lhczln/


     

     

  • 相关阅读:
    python限定方法参数类型、返回值类型、变量类型等
    双拼自然码
    关于将汉语拼音字母“ü”改成“v”的设想和建议
    数据库转模型图
    python中的捕获异常、异常跟踪
    内部教师爆料:某些民办学校真正的内幕
    炸薯条
    IntelliJ IDEA添加JavaDOC注释 方法 快捷键
    java获取当前路径的方法
    java获取全部子类或接口的全部实现
  • 原文地址:https://www.cnblogs.com/lhczln/p/5606546.html
Copyright © 2011-2022 走看看