Android底层驱动开发记录:03_HAL

2023-10-27

在上一节基础上增加HAL层代码

1、完成IoctrlJ25_hal.c,填充主要结构体hw_module_t

static struct ioctrlj25_device ioctrlj25_dev = {
	.common = {
		.close = ioctrlj25_close,
	},
	.ioctrlj25_open  = ioctrlj25_open,
	.ioctrlj25       = ioctrlj25,
};

/*
//可以定义在h文件中
typedef struct ioctrlj25_device {
    struct hw_device_t common;
	
	int (*ioctrlj25_open)(struct ioctrlj25_device* dev);
	int (*ioctrlj25)(struct ioctrlj25_device* dev,int which,int status);   
} ioctrlj25_device_t;
*/

static int ioctrlj25_device_open(const struct hw_module_t* module, const char* id,
            struct hw_device_t** device)
{
	*device = &ioctrlj25_dev;
	return 0;
}


/*===========================================================================*/
/* Default ioctrlj25 HW module interface definition                           */
/*===========================================================================*/

static struct hw_module_methods_t ioctrlj25_module_methods = {
    .open = ioctrlj25_device_open,
};
/*参考
struct hw_module_t HAL_MODULE_INFO_SYM = {
    .tag = HARDWARE_MODULE_TAG,
    .module_api_version = VIBRATOR_API_VERSION,
    .hal_api_version = HARDWARE_HAL_API_VERSION,
    .id = VIBRATOR_HARDWARE_MODULE_ID,
    .name = "Default vibrator HAL",
    .author = "The Android Open Source Project",
    .methods = &vibrator_module_methods,
};
*/

struct hw_module_t HAL_MODULE_INFO_SYM = {
    .id = IOCTRLJ25_HARDWARE_MODULE_ID,
    .methods = &ioctrlj25_module_methods,
};

完成ioctrlj25_open,和ioctrlj25,此处 ioctrlj25_open和ioctrlj25_device_open并不相同,后者时用来打开设备的。

2、修改com_android_server_IoctrlJ25Service.cpp

jint ioctrlj25open(JNIEnv *env, jobject cls)
{
	jint err;
	hw_module_t* module;
	hw_device_t* device;
	
	ALOGI("native ioctrlj25 open");
	/* 1. hw_get_module*/
	err = hw_get_module("ioctrlj25",(hw_module_t const**)&module);
	if(err == 0){
		/* 2. get device : module->methods->open*/
		err = module->methods->open(module,NULL,&device);
		if(err == 0){
			ioctrlj25_dev = (ioctrlj25_device_t*)device;
			/* 3. call ioctrlj25_open*/
			return ioctrlj25_dev->ioctrlj25_open(ioctrlj25_dev);
		}
	}	
	ALOGI("native ioctrlj25 open fail");
	return -1;
}

jint ioctrlj25ctl(JNIEnv *env, jobject cls, jint which, jint status)
{
	ALOGI("native ioctrlj25 ctrl: id=%d status=%d\r\n",which,status);
	return ioctrlj25_dev->ioctrlj25(ioctrlj25_dev,which,status);
}

其他基本不用修改。

3、

上传文件
frameworks/base/services/core/jni/com_android_server_IoctrlJ25Service.cpp
hardware/libhardware/include/hardware/IoctrlJ25_hal.h
hardware/libhardware/modules/IoctrlJ25/IoctrlJ25_hal.c
hardware/libhardware/modules/IoctrlJ25/Android.mk

Android.mk : 
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := ioctrlj25.default

# HAL module implementation stored in
# hw/<VIBRATOR_HARDWARE_MODULE_ID>.default.so
LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_C_INCLUDES := hardware/libhardware
LOCAL_SRC_FILES := IoctrlJ25_hal.c
LOCAL_SHARED_LIBRARIES := liblog
LOCAL_MODULE_TAGS := optional

include $(BUILD_SHARED_LIBRARY)


编译
mmm hardware/libhardware/modules/IoctrlJ25/
mmm frameworks/base/services/
打包编译,下载测试完成

这一节基本上就是这样了,如雷贯耳的HAL就这么简单,但具体生成的so动态库如何在实际项目中使用,还不知道,需要继续学习,也欢迎大家指点。 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android底层驱动开发记录:03_HAL 的相关文章

随机推荐

  • STM32学习笔记(一):输出PWM——HAL库

    文章目录 前言 一 PWM是什么 二 实例 PWM输出 2 代码 3 现象 3 总结 前言 本篇文章为个人参考总结所用 如果错误还望指出 涉及的知识 1 STM32CubeMx的部分使用 2 PWM原理及常用概念 3 用单片机生成一定频率的
  • 使用Git rebase合并多条提交记录commit。以及使用 git commit amend本地提交直接合并到远程已有commit的用法

    需求场景一 对某个小的功能点进行多次反复的修改提交 且已经提交到远程 导致commit记录过多 太过于杂乱无章 想要精简合并一些提交记录 场景还原 比如下图4个git commit记录 log1 log4 需要将他们合并成一个提交记录 解决
  • Spring MVC 数据绑定入门

    一 应用intellij IDEA创建SpringMVC项目 简单介绍一下 eclipse和idea有些概念上的差别 eclipse中的workspace相当于idea中的project eclipse中的project相当于idea中的m
  • RecyclerView放入正方形布局

    在使用RevyclerView时 有个需求 列表列数不固定 每个item的高度要和宽度相等具体看图 三列 四列 五列
  • 全球及中国蔬菜泥配料行业竞争策略及投资潜力研究报告2021-2027年版

    全球及中国蔬菜泥配料行业竞争策略及投资潜力研究报告2021 2027年版 目录 2020年 全球蔬菜泥配料市场规模达到了 百万美元 预计2027年将达到 百万美元 年复合增长率 CAGR 为 2021 2027 中国市场规模增长快速 预计将
  • 什么是websockret连接

    什么是WebSocket WebSocket 是一种网络传输协议 位于 OSI 模型的应用层 可在单个 TCP 连接上进行全双工通信 能更好的节省服务器资源和带宽并达到实时通迅 客户端和服务器只需要完成一次握手 两者之间就可以创建持久性的连
  • C++设计模式之一:观察者模式

    观察者模式定义了对象间的依赖关系 以至于一个对象的改变 依赖它的对象都会收到通知 求职者订阅了某职位发布网站 当有何时的职位出现时 他们会收到通知 include
  • STM32之模拟IIC总线通信

    目录 前言 头文件 辅助函数 相关信号函数 初始化函数 起始信号 停止信号 接收应答信号 发送应答信号 应答 非应答 发送一个字节数据 接收一个字节数据 应用 最后 前言 在这篇文章发表之前 鄙人发表过一篇51的模拟IIC总线通信 因某短见
  • 测试工具编写

    1 数据文件 csv 定义 2 预期文件 csv 定义 3 入参文件 csv 定义 每一个文件对应一个解析类 然后将这三个类封装成一个jar包 专门用来测试
  • Ubuntu16.04LTS下搭建强化学习环境gym、tensorflow

    1 安装Anaconda 去清华镜像下载anaconda3 4 3 0 linux x86 64 sh 然后在终端中输入以下命令进行安装 cd downloads bash anaconda3 4 3 0 linux x86 64 sh2
  • 【面向小白】深究模型大小和推理速度的关系!

    面向小白 深究模型大小和推理速度的关系 来源 https zhuanlan zhihu com p 411522457 本文将对衡量深度学习模型大小的一些常用指标 如计算量 参数量 访存量 内存占用等进行探讨 分析这些指标对模型部署推理的影
  • [Android实例] http请求No peer certificate的解决方法

    不少同学在做HTTP请求新浪授权或新浪数据的时候会出现 javax net ssl SSLPeerUnverifiedException No peer certificate的异常 现给出解决方法 已通过测试 写了一个自定义类继承SSLS
  • 安装tiny cudann

    如果编译报错 找不到nvcc 需要安装 conda install c conda forge cudatoolkit dev 我的ubuntu18 04 pip安装的pytroch cu116
  • 【Vue】关闭浏览器窗口之前弹出提示

    需求 叉掉浏览器窗口 弹出提示 确认后才会关闭窗口 mounted window addEventListener beforeunload e gt this beforeunloadHandler e methods beforeunl
  • linux cpan 参数配置,Linux下使用CPAN进行Perl模块的安装

    本文转自http blog sina com cn hellofrankey 当我们想使用某些Perl模块的时候 很可能会遇到当前系统不存在这个模块的情况 这时我们可以通过使用CPAN来对相应的模块进行获取 下面就介绍一下CPAN的使用方法
  • 微信小程序 rich-text img 宽度超出最简便解决办法

    因为项目上需要使用富文本 然后看了下小程序现在有个rich text 组件可以使用富文本 待开发完成测试时候发现rich text 对于图片无法限制最大宽度 在百度了一众方法后发现不太适合 最后以最简单的方式解决了此问题 bug原因 在ri
  • Android系统辅助触控,辅助触控大师软件下载-辅助触控大师 安卓版v5.0.6-PC6安卓网...

    辅助触控大师app是一款好用的系统操作工具 辅助触控大师app可以方便用户快速操控手机 自动按键 还有录屏 截屏 手机加速 内存清理 音乐控制 全局手势操作等强大功能 软件介绍 辅助触控大师app 一款自定义的系统浮动按钮 用户可以根据自己
  • B - Querying Multiset(优先队列)

    B Querying Multisethttps vjudge csgrandeur cn problem AtCoder abc212 d 思路 题目给Q次操作 1操作时 将xi写在球上装进袋子里 2操作时 将袋子里所有球上的数全部加上x
  • 苹果开发者账号注册方法简明指南

    注册苹果开发者账号的方法 在2020年以前 注册苹果开发者账号后 就可以生成证书 但2020年后 因为注册苹果开发者账号需要使用Apple Developer app注册开发者账号 所以需要缴费才能创建ios证书了 所以新政策出来后 注册苹
  • Android底层驱动开发记录:03_HAL

    在上一节基础上增加HAL层代码 1 完成IoctrlJ25 hal c 填充主要结构体hw module t static struct ioctrlj25 device ioctrlj25 dev common close ioctrlj