• 第九章


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

  • 相关阅读:
    CKA-Kubernets(K8s) (一)
    CKA-docker 容器的管理
    CKA-docker 镜像的管理
    CKA-docker 基础
    开年自省系列—— 阅读完一本书《财务之路系列》 读书笔记
    Sublime开启VIM模式
    JavaScript 踩坑开始(ing...)
    代码思考题玩玩
    P2016 战略游戏-树形DP
    皇宫看守-树形DP
  • 原文地址:https://www.cnblogs.com/xianrenzhilu/p/5652481.html
Copyright © 2020-2023  润新知