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

     

    第九章

    一、Google为android加入HAL主要有如下目的:

        1、统一硬件的调用接口,HAL有标准的调用接口,屏蔽Linux繁杂接口;

        2、解决GPL版本问题;

        3、对于有些硬件,可能需要访问一些用户空间的资源,或在内核空间不方便完成的工作以及特殊需求,可利用HAL辅助完成;

    二、编写一款支持HAL的linux驱动程序步骤:

    1、编写linux驱动(尽量简洁,尽量将业务逻辑放倒HAL library);

    2、编写HAL Library;

    3、编写service library 可以使一般的linux library 也可以是TNI library。

    三、编写HAL 模块的步骤和原理:

    1步:描述HAL 模块的hw_module_t结构体。

       typedef struct hw_modu l e_t {/ *模块的Tag ,值必须是HARDWARE_MODULE_TAG */

       uint32_t tag;/* 模块主版本号*/

       uintl6_t version_major;/* 模块从版本号*/

       uintl6_t version_minor;/*模块的ID ,通过该ID 可以找到当前模块*/

       const char *id;/*模块名称*/

       const char *name;/*模块作者*/

       const char *author/*与模块相关的函数指针,都包含在hw_module methods_t 结构体中*/

       struct hw_module_methods_t* methods;/*模块的dso*/

       void * dso;/*保留的空间*/

      uint32_t reserved[32- 7];

      }hw_module_t

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

        open 函数是HAL 模块的入口点。该函数主要做如下3 项工作

      1初始化hw_device_t 的子结构体。除了设置一些必妥的变量外,还需要设置操作硬件的配

      数指针〈本例是close 、set_on 和set_off)close 函数由系统自动调用。在这一步由close 、set_on 和set_off 指定的函数还没有定义, 可以先把函数名写上,或在定义了相关函数后再设置这些函数指针。

      2打开设备文件

      3初始化寄存器

    第3 步:定义hw_module_methods_ t 结构体变量

    第4 步: 定义HAL_MODULE_INFO_SYM 变量

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

    第6 步 编写控制LED 的函数

     

     

  • 相关阅读:
    【转】如何解决Verilog中参数化的赋值:赋全0,赋全1,赋全Z,赋全x
    【转】PCIe DMA
    【转】PCIe学习(二)——PCIe DMA关键模块分析之一
    PCIe配置空间
    [转]PCIe学习笔记之MSI/MSI-x中断及代码分析
    [转]常用通信接口保护电路
    [转]原理图和PCB元件对应查找--Altium Designer
    [原]PCB中MARK点制作
    [转]使用Altium Designer软件铺铜后再挖铜
    支持Json进行操作的Javascript类库TAFFY DB
  • 原文地址:https://www.cnblogs.com/qiekaifanqie/p/5638808.html
Copyright © 2011-2022 走看看