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

    9

    HAL是建立在Linux驱动之上的一套程序库,是属于Linux内核层之上的应用层。

    传统的Linux系统中Linux驱动一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑代码。

    Android加入HAL主要有以下目的:

    1.统一硬件的调用接口

    2.解决了GPL版权问题

    3.针对一些特殊的要求

    编写一款支持HALLinux驱动程序的步骤:

    1.编写Linux驱动

    2.编写HAL Library

    3.编写service library

     

    编写调用LED驱动的HAL模块

    任何被系统自动调用的程序都会有一个标准的接口。这个接口相当于一个约定的规则。不管任何程序,只要遵循这个规则,就可以成功被调用。例如,C语言可执行程序都会有一个main函数,系统在运行程序时会实现执行main函数。Linux驱动的init函数与main函数的性质相似。在装载Linux驱动的过程中系统会调用init函数。

    既然HAL模块也可以被android系统自动调用没那个自然也拥有类似maininit函数的接口,只不过这个接口不是函数,而是一个固定名称的结构体变量HAL_MODULE_INFO_SYM,也就是说,所有的HAL驱动都必须要有一个HAL_MODULE_INFO_SYM

     

    编写HAL模块详细步骤:

    第一步:定义结构体和宏

    hw_module_t/hw_device_t/hw_module_methods_t

    在后面的代码中不能直接使用结构体,需要一个继承

    第二步:编写HAL模块的open函数

    Open函数是HAL模块的入口点,主要3项工作:

    初始化hw_device_t的子结构体

    打开设备文件

    初始化寄存器

    第三步:定义hw_module_methods_t结构体变量

    第四步:定义HAL_MODULE_INFO_SYM变量

    该变量一般为hw_module_t或其子结构体。

    第五步:编写HAL模块的close函数

    第六步:编写控制led的函数

     

    HAL模块库文件的存放路径有两个:/system/lib/hw/vendor/lib/hwHw_get_module函数会先从/system/lib/hw目录根据库文件命名规则寻找库文件。

     

    android系统中使用Linux驱动有两种方式:

    1、通过传统的方式直接与Linux驱动交互

    2、Android特有的,通过HAL模块。HAL模块本质上就是通过Linux共享库(.so)与Linux驱动交互,然后应用程序在访问Linux共享库。每个HAL共享库指定一个id,再利用这个id配合一定的规则找到Linux共享库。

    http://www.cnblogs.com/875825a/

  • 相关阅读:
    2.替换空格
    1.二维数组的查找
    poj 2431 expedition
    python入门第三天
    python入门第二天__练习题
    [Python3.6] print vs sys.stdout.write
    python入门第二天
    使用Flask-mail发送邮件无法连接主机
    KMP
    逆序对 线段树&树状数组 (重制版)
  • 原文地址:https://www.cnblogs.com/875825a/p/5635380.html
Copyright © 2011-2022 走看看