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 的相关文章

  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • 维护 HttpUrlConnection 调用之间的会话(Native/Webview)

    让我从我做的开始desire 我想制作一个应用程序part native and part webviews Problem 维护本机和 webview 部分之间的会话 My 处理方法 this 我打算实现一个本机登录 其中我向用户展示两个
  • Android ListView 自定义适配器 ImageButton

    这可能不是正确的方法 如果有更好的方法请告诉我 我创建了一个自定义适配器类 在我的 getView 方法中我膨胀了我想要使用的视图 public View getView int position View convertView View
  • Android 5.0 Lollipop 中屏幕固定关闭时如何收到通知?

    我有一个在后台运行的应用程序 并在手机上发生特定事件时启动活动 我发现在 Android 5 0 中 当用户使用另一个应用程序打开屏幕固定时 startActivity intent 调用将被完全忽略 我的应用程序不知道该活动尚未启动 因此
  • FLAG_ACTIVITY_REORDER_TO_FRONT 被忽略

    我有一个包含项目列表的 FragmentActivity 当应用程序处于后台时 可以推送该项目列表 发生这种情况时 我想创建一个状态栏通知并提醒用户更新 当用户单击通知时 活动应重新排序到前面并显示在屏幕上 同时在列表底部显示新项目 所以我
  • Android 谷歌地图 V2 已停止

    我正在尝试构建地图应用程序并关注这个链接 https blog emildesign rhcloud com p 435一步步 我在这里找到了类似的主题 但对我没有帮助 我想显示地图 但是当我运行它时 它返回强制关闭和我的 Android
  • 需要在 Android 中伪造正在扫描的 NFC 标签

    好的 我有一个应用程序 此应用程序仅在扫描 NFC 标签 任何标签 时才会完成任务 唯一的问题是 我没有任何 nfc 标签 无论如何 我正试图消除对卡的需要 所以我需要的是一种 伪造 使其看起来 就像已扫描 nfc 标签的方法 我可以编写应
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • Android 消费品:“已经拥有该商品”,但 inventory.hasPurchase() 为 false

    我被 Google In App v3 困住了 我测试了一次没有消费的购买 例如 当应用程序在购买和消费之间崩溃时 现在我找不到出路 如果我尝试再次购买 它会显示 您已经拥有该商品 但是当我测试所有权时 它说我不拥有它 Inventory
  • Android - 多次实例化一个片段?

    我正在创建一个在 ListView 中显示数据的应用程序 数据分为两种类型 热门 收藏夹 我有一个活动和两个片段 片段根据类别显示项目列表 我为此使用了 ListView 然后我有两个fragment layouts 它们在设计上完全相同
  • Spotify 登录错误 INVALID_CLIENT:无效的重定向 URI android

    我正在制作一个包含 Spotify 集成的应用程序 我点击了此链接https developer spotify com technologies spotify android sdk tutorial https developer s
  • 如何知道用户是否在 Android 应用程序中输入了错误的密码(锁定屏幕)

    我正在开发一个 Android 应用程序 如果用户在 Android 锁定屏幕中输入错误的密码 则必须完成其中一项活动 例如 如果用户输入错误的密码 则会发送电子邮件 我将不胜感激任何帮助 提前致谢 Kshitij 锁屏在完全沙箱环境中运行
  • 如何在Android网格视图中设置单元格大小?

    我正在尝试为应用程序制作一个带有大图标的网格视图 但我找不到任何有关修改 Android 上网格布局上的单元格大小的教程 有人可以给我一个例子或相关链接吗 Thanks 就像另一个一样适配器视图 http developer android
  • BitmapFactory.decodeResource() 忽略 jpg 图像的 inPreferredConfig 选项

    我尝试将jpeg资源图像加载到ARGB 8888格式的位图 BitmapFactory Options opts new BitmapFactory Options opts inPreferredConfig Bitmap Config
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • 确定我可以向文件句柄写入多少内容;将数据从一个 FH 复制到另一个 FH

    如何确定是否可以将给定数量的字节写入文件句柄 实际上是套接字 或者 如何 取消读取 我从其他文件句柄读取的数据 我想要类似的东西 n how much can I write w handle n read r handle buf n a
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg
  • 膨胀类 android.support.design.widget.CoordinatorLayoute 时出错

    我正在尝试运行我的应用程序 但不断收到标题中列出的错误 我读过周围的内容 人们说尝试将主题更改为 AppCombat 主题 但这似乎不起作用 以下是我遇到的错误 Process com example jmeyer27 crazytiles
  • Android Jasper 报告

    Jasper Reporting 可以集成到 Android 应用程序中吗 我正在尝试从 jrxml 文件生成 PDF CSV 文本和 XLS 报告 但是 我没有看到 Android SDK 支持 net sf jasperreports
  • Android Espresso - 如果未选中,请单击复选框

    I have onView withId R id check box perform click 但我只想在尚未选中该复选框时执行此操作 我怎样才能在浓缩咖啡中做到这一点 我还想根据其之前的状态来切换复选框 开关 起初 我尝试用此方法打开

随机推荐

  • 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