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

    1)HAL硬件抽象层是建立在Linux驱动之上的一套程序库。这套程序库并不属于Linux内核,而是属于Linux内核层上的应用层。Google为Android增加HAL的主要目的除了尽量避免应用程序直接访问Linux驱动外,还有保护私人财产。

    2)在传统的Linux系统中Linux驱动一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑代码。对于访问硬件寄存器的代码,并么有什么秘密可言,因为这都是调用的Linux内核的标准函数进行的标准操作。而Linux驱动的业务逻辑部分对于有些企业或个人并不想将源代码公开。

    3)Google为Android加入HAL主要有以下目的:

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

    2)解决了GPL协议;

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

    4)编写一款支持hal的linux驱动程序的步骤:

    1编写linux驱动

    2编写hal library

    3编写service library。

    5)在编写Linux驱动以及与驱动相关的程序的过程中应分段测试每一部分程序。这些程序一般需要从Linux驱动开始编写,测试当然也就要从Linux驱动开始。每编写完一部分,应使用相应的方法进行测试,以便将当前编写的程序的BUG降到最低。

    6)任何被系统自动调用的程序都会有一个标准的接口。这个接口相当于一个约定的规则,不管任何程序,只要遵循这个规则,就可以成功被调用。

    7)编写HAL模块的步骤和原理如下:

        1定义结构体和宏;需要使用3个非常重要的结果提(hw_module_t、hw_device_t、hw_module_methods_t)

        (2)编写HAL模块的open函数;3项工作A初始化hw_device_t的子结构体B打开设备文件C初始化寄存器

        3定义hw_module_methods_t结构体变量HAL模块需要hw_module_methods_t结构体的open函数指针变量指定open入口函数

        4定义HAL_MODULE_INFO_SYM变量;所有的HAL模块都必须有一个HAL_MODULE_INFO_SYM 变量。该变量一般为hw_module_t或其子结构体。

        5编写HAL模块的close函数;当HAL模块被卸载后会调用close函数。

    (6)编写控制LED的函数;

    8)HAL模块本质上就是通过Linux共享库(.so)与Linux驱动交互,然后应用程序再访问Linux共享库与Linux驱动交互,然后应用程序再访问Linux共享库。每一个HAL共享库指定一个ID,再利用这个ID配合一定的规则找到Linux共享库。

  • 相关阅读:
    GridView鼠标悬浮
    GridView控件属性及应用(转载)
    GridView动态绑定按钮
    GridView隐藏列, 并能读取列值的解决方法(转载)
    Oracle语句需要注意的地方
    Oracle数据库创建一个主键ID自增的表
    微软宣布.NET开源:关键软件技术兼容各大平台
    全球排名前50网站都用什么语言开发的?
    钢琴
    SQL函数
  • 原文地址:https://www.cnblogs.com/wl12/p/5652186.html
Copyright © 2011-2022 走看看