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

    一、Android增加HAL的主要目的除了尽量避免应用程序直接访问linux驱动之外,还有一个重要原因就是保护企业或个人的核心业务逻辑。在传统的linux系统中linux驱动一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑代码,对于访问硬件寄存器的代码,都是调用linux内核的标准函数进行操作并没有什么秘密可言。而对于业务逻辑代码,它里面存在一些商业秘密或技术专利企业和个人并不想公开,所以在Android层次结构的系统运行库层增加了HAL,因此HAL就不属于linux内核的一部分而是在Android系统运行库层,自然就不必开源了。而linux驱动也就相当于一个“数据二传”了,唯一的功能就是接受来自HAL传过来的数据,并将数据写入指定寄存器中;或从寄存器读取数据,返回给HAL。HAL的主要目的如下:

    1.统一硬件的调用接口

    2.解决了GPL版权问题

    3.真对一些特殊的要求

    二、HAL架构

    相比于旧的HAL架构,新的HAL架构加入了一些架构要求的入口代码,并多了一层service程序库(就在此层通过ID定位了HAL Library)。

    注:虽然使用了新的HAL架构,但为了兼容性旧的HAL架构仍然支持。

    三、编写支持HAL的linux驱动程序的步骤

    1.编写linux驱动(linux驱动代码要尽量简洁,尽可能将业务逻辑代码放到HAL Library中)

    2.编写HAL Library(类库文件有一个接口,通过HAL_MODULE_INFO_SYM 变量实现。Service Library 就是通过在这个接口中定义的 ID 定位 HAL Library)

     编写HAL模块的步骤及原理:

    (1)第 1步:定义结构体和宏,编写 HAL 模块需要使用到 3 个非常重 要的结构体 ( hw_module_t 、 hw_device_t和hw_ module_ method_t)

    (2)第2步:编写HAL模块的open函数

    (3)第3步:定义hw_ module_ method_t结构体变量

    (4)第4步:定义HAL_MODULE_INFO_SYM结构体变量

    (5)第5步:编写HAL模块的close函数

    (6)第6步:编写控制LED的函数

    3.编写Service Library

  • 相关阅读:
    可自主二次开发的微信云控客服crm系统软件(带源码)
    个人微信号二次开发sdk协议,微信个人号开发API接口
    最新的微信SCRM客服系统
    微信个人号客服系统淘宝客发单机器人sdk服务端接口列表
    sdk定制开发微信群控云控客服系统教程
    web版微信自动发消息(实现微信个人号机器人)
    Adobe Audition 基本使用
    MPEG-7 视觉描述符
    图像检索:几种基于纹理特征的图像检索算法
    div+css基础教程
  • 原文地址:https://www.cnblogs.com/wyx13/p/5625790.html
Copyright © 2011-2022 走看看