WEB开发网
开发学院手机开发Android 开发 Android HAL 分析 阅读

Android HAL 分析

 2010-05-26 06:40:00 来源:WEB开发网   
核心提示:sLedDevice->set_off(sLedDevice, led);7 HAL stub编写方法(1)定义自己的HAL结构体,编写头文件led.h, hardware/hardware.hstruct led_module_t {struct hw_module_t common;};struct led_

sLedDevice->set_off(sLedDevice, led);

7 HAL stub编写方法

(1)定义自己的HAL结构体,编写头文件led.h, hardware/hardware.h

struct led_module_t {

struct hw_module_t common;

};

struct led_control_device_t {

struct hw_device_t common;

int fd; /* file descriptor of LED device */

/* supporting control APIs go here */

int (*set_on)(struct led_control_device_t *dev, int32_t led);

int (*set_off)(struct led_control_device_t *dev, int32_t led);

};

继承关系如下图:

<a target=Android HAL 分析 - On<wbr>ce - 许兴旺的博客" src="http://tech.cncms.com/tech/UploadPic/2010911/20109110170819.jpg" width="554" height="271" border="0" onload="return imgzoom(this,550);" style="cursor:pointer;" onclick="javascript:window.open(this.src);"/>

图5:HAL stub与HAL module继承关系

(2)设计led.c 完成功能实现和HAL stub注册

(2.1)led_module_methods继承hw_module_methods_t,实现open的callback

struct hw_module_methods_t led_module_methods = {

open: led_device_open

};

(2.2)用HAL_MODULE_INFO_SYM实例led_module_t,这个名称不可修改

tag:需要制定为 HARDWARE_MODULE_TAG

id:指定为 HAL Stub 的 module ID

methods:struct hw_module_methods_t,为 HAL 所定义的「method」

const struct led_module_t HAL_MODULE_INFO_SYM = {

common: {

tag: HARDWARE_MODULE_TAG,

version_major: 1,

version_minor: 0,

id: LED_HARDWARE_MODULE_ID,

name: "Sample LED Stub",

author: "The Mokoid Open Source Project",

methods: &led_module_methods,

}

/* supporting APIs go here. */

};

(2.3)open是一个必须实现的callback API,负责申请结构体空间,填充信息,注册具体操作API接口,打开Linux驱动。

由于存在多重继承关系,只需对子结构体hw_device_t对象申请空间即可。

int led_device_open(const struct hw_module_t* module, const char* name,

上一页  1 2 3 4  下一页

Tags:Android HAL 分析

编辑录入:coldstar [复制链接] [打 印]
赞助商链接