第九章随笔

 

第九章

一、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 的函数

 

 

原文地址:https://www.cnblogs.com/qiekaifanqie/p/5638808.html