Android硬件服务访问(3):HAL中添加接口支持访问硬件

Android硬件服务访问2:HAL中添加接口支持访问硬件

如何在硬件抽象层中增加硬件模块来和内核驱动程序交互。

这一小节中我们在Android系统为我们自己的硬件增加了一个硬件抽象层模块,但是现在Java应用程序还不能访问到我们的硬件。我们还必须编写JNI方法和在Android的Application Frameworks层增加API接口,才能让上层Application访问我们的硬件。在接下来的文章中,我们还将完成这一系统过程,使得我们能够在Java应用程序中访问我们自己定制的硬件。

在这里插入图片描述

一、编写HAL C

添加led_hal.h和led_hal.c文件再Android指定目录下:

hardware/libhardware/include/hardware/led_hal.h
hardware/libhardware/modules/led/led_hal.c

HAL在运行时是在user space。

在led_hal.h中定义led_device_t结构体:

#include <stdint.h>
#include <sys/cdefs.h>
#include <sys/types.h>
#include <hardware/hardware.h>

__BEGIN_DECLS

struct led_device_t {
   
    struct hw_device_t common;

	int (*led_open)(struct led_device_t* dev);
	int (*led_ctrl)(struct led_device_t* dev, int which, int status);
};
__END_DECLS

led_hal.c中的步骤如下:

/* 1. 实现一个名为HMI的 hw_module_t 结构体 */

struct hw_module_t HAL_MODULE_INFO_SYM = {
   
	.tag = HARDWARE_MODULE_TAG,
    .id = "led",
    .methods = &led_module_methods,
};

static struct hw_module_methods_t led_module_methods = {
   
    .open = led_device_open,
};

/* 2. 实现一个open函数, 它返回 led_device_t 结构体 */

static int led_device_open(const struct hw_module_t* module, const char* id,
        struct hw_device_t** device)
{
   
	*device =<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值