zoukankan      html  css  js  c++  java
  • 第九章

    HAL(硬件抽象层)是建立在Linux驱动之上的一套主程序,这套主程序并不属于Linux内核,而是属于Linux内核层之上的应用层。在Android中加入HAL的原因是:Linux系统中Linux驱动有两种类型的代码,访问硬件寄存器的代码——调用的Linux内核的标准函数进行的标准操作;业务逻辑代码——有些企业或个人并不想将源代码公开。Google为了满足这些不想开源的Linux驱动作者的要求,在android层次结构中的系统运行库增加了一个HAL,但是HAL并不是Linux内核的一部分。主要目的:统一硬件的调用接口;解决了GPL版权问题;针对一些特殊的要求。

    HAL架构基本原理就是在Android系统中使用程序库.so文件调用位于内核空间的一半通过设备文件访问的Linux驱动。然后Android应用程序apk文件可通过NDK程序访问HAL中的程序库,或直接在Android应用程序中访问HAL中的程序库,可直接使用Java代码访问。

    编写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的函数,根据设备类型和功能的不同,编写相应的函数 

  • 相关阅读:
    【使用教程】CMDer,Window下CMD的替代者
    什么是数据仓库?
    【大话存储】学习笔记(八),数据保护
    分布式与集群
    【大话存储】学习笔记(五),以太网
    【廖雪峰】Python
    【大话存储】学习笔记(7章), OSI模型
    KVM计算虚拟化原理,偏基础
    DevOps
    H3C CAS(云管理平台)介绍
  • 原文地址:https://www.cnblogs.com/xianrenzhilu/p/5652481.html
Copyright © 2011-2022 走看看