标签:
第九章:
一、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 的函数。
标签:
原文地址:http://www.cnblogs.com/qiekaifanqie/p/5638808.html