• 第九章 硬件抽象层: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

  • 相关阅读:
    C++学习(一)之Visual Studio安装以及首次使用
    基于BP的B/S架构破解
    铁三测试题——权限、你是管理员吗?——WP
    实验吧—安全杂项——WP之 flag.xls
    实验吧—安全杂项——WP之 女神
    wireshark显示过滤器的几种用法(转自他人博客)
    实验吧—安全杂项——WP之 你知道他是谁吗?
    实验吧—Web——WP之 FALSE
    实验吧—Web——WP之 Guess Next Session
    实验吧—Web——WP之 简单的sql注入之2
  • 原文地址:https://www.cnblogs.com/wyx13/p/5625790.html
Copyright © 2020-2023  润新知