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

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

          2.要在Android中加入HAL的原因:在linux驱动中一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑代码。对于访问硬件寄存器的代码而言,并没有秘密,这都是调用linux内核的标准函数进行的标准操作。

           3.Google为android加入HAL其主要目的在于:

            统一硬件的调用接口;

            解决了GPL版权问题;

            针对一些特殊要求。

           4.andriod HAL架构

             在Andriod系统中使用程序库,条用位于内核空间的Linux驱动,然后Andriod应用程序。

             HAL的基本原理是在android系统中使用程序库调用内核空间的linux驱动。

           5. 为LED增加HAL:将所有业务逻辑从LED驱动移植到HAL模块,而LED驱动模块只保留读写寄存器的工程能。加入HAL会使组成linux驱动的一整套library更加独立,更加容易维护。

           6.编写一款支持HAL的LINUX程序驱动程序的步骤:

              1>Linux驱动程序;

              2>编写HAL Library;

              3>编写Service Library。

           7.编写HAL模块的步骤和原理:

              1>定义结构体和宏

                 3个重要的结构体hw_module_t、hw_device_t、hw_module_methods_t

            2>编写HAL模块的open函数

                 Open函数是HAL模块的入口点。初始化hw_device_t的子结构体;打开设备文件;初 始化寄存器

              3>定义hw_module_methods_t结构体变量

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

              4>定义HAL_MODULE_INFO_SYM变量

                  id表示HAL模块中Android系统中的标识。通过id找到并装载HAL模块。

                  methods变量需要指向第3步定义的hw_module_methods_t结构体的地址,当调用者通过id找到并装载HAL模块后,就会通过methods变量找到hw_module_methods_t结构体,并调用hw_module_methods_t.open函数。

              5>编写HAL模块的close函数

                  当HAL模块被卸载后会调用close函数

              6>编写控制LED的函数

                  根据设备类型和功能的不同,编写相应的函数 

     

  • 相关阅读:
    [转载]Ubuntu下ssh服务的安装与登陆(ssh远程登陆)
    Linux定时器
    sleep 和 usleep的实现方法
    如何在MATLAB下把模糊推理系统转化为查询表(转载)
    FPGA学习心得汇总(手中写代码,心中有电路)
    3D三栅极晶体管(摘抄)
    模糊控制
    Quartus II 中参数化模块库(LPM)的使用
    Quartus II 与modelsim连接不上的问题
    接近开关,光耦
  • 原文地址:https://www.cnblogs.com/bigcrazy/p/5651713.html
Copyright © 2011-2022 走看看