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

    通过对本章节的学习我学到了如下知识点:

     一、HAL硬件抽象层是建立在Linux驱动之上的一个程序库。属于Linux内核层上的应用层,添加它的主要原因是尽量避免应用程序直接访问Linux驱动,保护个人的商品利益,传统的Linux驱动一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑的代码。

    二、如何编写一个支持HAL的Linux驱动程序的主要步骤: (1)编写Linux 驱动    “编写Linux 驱动”,从表明上看是废话,但如果要为linux 驱动添加HAL,而且想尽量保护敏感数据。Linux 驱动的代码就要尽量简洁,尽可能将业务逻辑放到HAL Library 中。 (2)编写HAL    HAL Library 就是普通的Linux Library (*.so )文件。但这类库文件有一个接口。通过HAL MODULE_INFO SYM 变量实现。Service Library 就是通过在这个接口中定义的ID 定位HALLibrary的。 (3)编写Service Library    尽管这步并不是必需的,但新的HAL 架构要求我们这样做。Service Library 也是Linux Library 。这一步比较灵活。Service Library 可以是一般的Linux Library,也可以是JNI Library。

    三、 Google为Android加入HAL的主要目的: (1)统一硬件的调用接口。由于HAL 有标准的调用接口,所以可以利用HAL屏蔽Linux 驱动复杂、不统一的接口。

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

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

    四、编写hal模块的步骤与原理:

    (1)、定义结构体与宏

    (2)、编写hal模块的open函数

    (3)、定义hw_module_methods_t结构体变量

    (5)、定义HAL_MODULE_INFO_SYM变量

    (6)、编写hal模块的close函数

    (7)、编写控制led的函数

  • 相关阅读:
    [Deep-Learning-with-Python] Keras高级概念
    [Deep-Learning-with-Python]计算机视觉中的深度学习
    求数值的n次方根
    caffe dropout解读
    Paper Mark2
    分组卷积+squeezenet+mobilenet+shufflenet的参数及运算量计算
    SSD总结
    sed例子
    Ubuntu 16.04安装MySQL设置远程访问出现问题的完美解决方案(error:10061)
    解决Python-OpenCV中cv2.rectangle报错
  • 原文地址:https://www.cnblogs.com/liang123456/p/5640131.html
Copyright © 2011-2022 走看看