展讯-QMI8658和气压传感器驱动调试

news2024/10/6 18:33:51

1.调试QMI8658

参考demo,添加QMI8610相关内容

当前驱动路径位于:bsp/modules/input/misc/qmi8610/qmi8610.c

编译使用make sockoimage

用fastboot烧录

1.确定驱动被正常加载

代码添加之后,首先确定有没有进入当前驱动文件

dmesg |grep QmiImu_i2c_probe

因为传感器型号不一样,需要参考demo代码,移植相关代码过去,这个过程不描述了,先保证编译不报错。

2.寄存器地址修改

主要是能正常读取设备的ID,以及确定传感器获取的值在哪个位置

代码里面有相关的测试节点

对应:/sys/devices/virtual/input/input6

通过测试接口,读取设备ID以及传感器的值,确定i2c底层接口正常

3.看传感器状态

进测试模式,或者使用传感器APP

看数据是不是正常变化的

调试遇到两个问题

1.数值在乱飘,特别是Y轴数据在乱跑

这个查明,返回的数据,需要状态寄存器是可读的时候,不能随便上传

2.X和Y轴不对应

这个需要在驱动层做一下转换

2.气压传感器

1.判断驱动被正常加载

2.查看内核数据是否正常

3.移植的时候,遇到无法开机的问题

查看日志文件

11-03 13:37:57.879  1688  1688 D pressure-qmp6988: input path : /sys/class/input/input7/name
11-03 13:37:57.879  1688  1688 D pressure-qmp6988: name: gyroscope
11-03 13:37:57.879  1688  1688 D pressure-qmp6988: input path : /sys/class/input/input5/name
11-03 13:37:57.880  1688  1688 D pressure-qmp6988: name: compass
11-03 13:37:57.880  1688  1688 D pressure-qmp6988: input path : /sys/class/input/input3/name
11-03 13:37:57.880  1688  1688 D pressure-qmp6988: name: sprdphone Headset Ja
11-03 13:37:57.880  1688  1688 F libc    : FORTIFY: strlen: detected read past end of buffer
11-03 13:37:57.880  1688  1688 F libc    : Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 1688 (android.hardwar), pid 1688 (android.hardwar)

从logcat来看,这里出现了问题

通过shell读取input3的name

发现少了2个字符,初步判断是数组越界了

找到对应代码

vendor/sprd/modules/sensors/libsensorclassic/press/Press_qmp6988.cpp

4.权限问题

遇到内核层有数据,但是应用层没拿到数据的问题

判断是权限问题,找到对应位置

目前应用层的权限是只读

给权限chmod 777 *

数据能正常上传

去代码里面修改设备权限问题

bsp/modules/input/misc/qmp6988/qmp6988.c

static DEVICE_ATTR(init, 0666, show_init_value, NULL);
static DEVICE_ATTR(chipinfo, 0666, show_chipinfo_value, NULL);
static DEVICE_ATTR(sensordata, 0666, show_sensordata_value, NULL);
static DEVICE_ATTR(press, 0666, show_press_value, NULL);
static DEVICE_ATTR(trace, 0666, show_trace_value, store_trace_value);
static DEVICE_ATTR(selftest, 0666, show_selftest_value, NULL);
static DEVICE_ATTR(dumpinfo, 0666, show_dumpinfo_value, NULL);
static DEVICE_ATTR(calidata, 0666, show_calidata_value, NULL);
static DEVICE_ATTR(enable, 0666, show_enable_value, store_enable_value);
static DEVICE_ATTR(delay, 0666, show_delay_value, store_delay_value);

static DEVICE_ATTR(install, 0666, qmp6988_status_show, NULL);
static DEVICE_ATTR(value, 0666, show_press_value, NULL);
static DEVICE_ATTR(control, 0666, qmp6988_control_show, qmp6988_control_store);

上面的内容,直接编译会报错,需要修改内核文件

bsp/kernel/kernel4.14/include/linux/kernel.h

还要修改

bsp/kernel/kernel4.14/fs/sysfs/group.c

烧录之后正常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1849790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Gradle 自动化项目构建-Gradle 核心之 Project

一、前言 从明面上看,Gradle 是一款强大的构建工具,但 Gradle 不仅仅是一款强大的构建工具,它更像是一个编程框架。Gradle 的组成可以细分为如下三个方面: groovy 核心语法:包括 groovy 基本语法、闭包、数据结构、面…

C#调用OpenCvSharp实现图像的直方图均衡化

本文学习基于OpenCvSharp的直方图均衡化处理方式,并使用SkiaSharp绘制相关图形。直方图均衡化是一种图像处理方法,针对偏亮或偏暗的图像,通过调整图像的像素值来增强图像对比度,详细原理及介绍见参考文献1-4。   直方图均衡化第…

计算机组成原理笔记-第1章 计算机系统概论

第一章 计算机系统概论 笔记PDF版本已上传至Github个人仓库:CourseNotes,欢迎fork和star,拥抱开源,一起完善。 该笔记是最初是没打算发网上的,所以很多地方都为了自我阅读方便,我理解了的地方就少有解释&a…

如何恢复 Mac 数据?适用于 Mac 的免费磁盘恢复软件

对于大多数 Mac 电脑用户来说,丢失数据是他们最不想遇到的噩梦之一。然而,无论我们多么小心地使用 Mac,多么有条理地存储重要文件,我们仍然有可能丢失 Mac 上的数据。某些硬件故障更有可能导致您意外丢失文件。除此之外&#xff0…

在WordPress上添加亚马逊联盟链接的三种方法

在互联网快速发展的今天,很多人都希望通过网络来增加收入,而加入亚马逊联盟计划(Amazon Associates)无疑是一个不错的选择。如果你有一个WordPress网站,那么在文章中添加亚马逊联盟链接是个很好的变现方式。今天&#…

IDEA services模块无法启动springboot服务(添加了springboot但是为空白)

https://blog.csdn.net/m0_54042402/article/details/117918995 https://blog.csdn.net/qq_46550964/article/details/122235235 Alt8 显示services模块 发现有springboot启动模块,点一下springboot之后,这个模块就消失了 会自动在.idea文件夹下的work…

Android平台下VR头显如何低延迟播放4K以上超高分辨率RTSP|RTMP流

技术背景 VR头显需要更高的分辨率以提供更清晰的视觉体验、满足沉浸感的要求、适应透镜放大效应以及适应更广泛的可视角度,超高分辨率的优势如下: 提供更清晰的视觉体验:VR头显的分辨率直接决定了用户所看到的图像的清晰度。更高的分辨率意…

AI全栈之coze的logo生成

前言 前几日体验了国产的AI-Agents产品coze 它是一种能够自主执行任务、与环境进行交互并根据所获取的信息做出决策和采取行动的软件程序 并且可以自己去创建属于自己的AIBot,还是很有意思的,大家可以去体验体验 在体验过程中,我发现在创…

Zygote进程的理解

Zygote进程是安卓系统的一个重要进程,由init进程创建而来;另外系统里的重要进程(system_server等)都是由zygote进程fork的,所有的app进程也是由zygote进程fork的。 一、C 里的fork函数 fork是Linux里面创建子进程的函…

【Apache Doris】如何实现高并发点查?(原理+实践全析)

【Apache Doris】如何实现高并发点查?(原理实践全析) 一、背景说明二、原理介绍三、环境信息四、Jmeter初始化五、参数预调六、用例准备七、高并发实测八、影响因素九、总结 本文主要分享 Apache Doris 是如何实现高并发点查的,以…

Virtualbox主机和虚拟机之间文件夹共享及双向拷贝

在VirtualBox这样的虚拟化环境中,实现主机与虚拟机之间的文件夹共享与双向文件传输是一个常见的需求。下面,我们将详细讲解如何在VirtualBox中实现这一功能。 一、安装与准备 首先,确保你已经安装了VirtualBox,并在其上成功创建…

图像处理与视觉感知复习--三维重建基础

文章目录 完整的摄像机模型(摄像机内外参数)理解三个参考系齐次坐标系中的投影变换 摄像机标定单视图几何无穷远点、无穷远线、无穷远平面影消点、影消线 三维重建基础与极几何极几何、本质矩阵与基础矩阵 双目立体视觉视差或深度的推导过程 完整的摄像机…

微信小程序毕业设计-餐厅点餐系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

单机小游戏好上架的应用市场有哪些?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

长尾式差分放大电路调零

长尾式放大电路用了两个参数相同的三极管,但实际上并没有完全相同的三极管,所以为了提高差分放大电路的对称性(一边电流增加多少,另一边电流减小多少,即能在电阻Re上产生的压降不变(后面做虚地处理)),在下图中加入可调…

【CT】LeetCode手撕—143. 重排链表

目录 题目1- 思路2- 实现⭐143. 重排链表——题解思路 3- ACM 实现 题目 原题连接:143. 重排链表 1- 思路 模式识别:重排链表 ——> 逆向 ——> ① 找到中间节点 ——> ②逆置 mid.next 链表——> ③遍历 2- 实现 ⭐143. 重排链表——题解…

Vue72-路由传参1

一、需求 点击哪个消息,就展示哪个消息的详情 这是一个三级路由! 给路由组件:detail.vue传递消息数据。 二、代码步骤 2-1、编写路由组件 从$route.query属性里面获取传参 2-2、编写路由规则 2-3、编写路由标签,传参 1、to的字…

做好海外ASO优化的7大核心要素你了解几个?

海外App进行ASO优化时,需要综合考虑多个方面以确保应用在应用商店中获得更高的曝光率和下载量。以下是一些关键的ASO优化步骤,结合参考文章中的相关信息进行详细阐述: 1.关键词优化 调研目标市场的用户行为和检索习惯,挖掘与应用…

让你的 Python 代码更快的小技巧

我们经常听到 “Python 太慢了”,“Python 性能不行”这样的观点。但是,只要掌握一些编程技巧,就能大幅提升 Python 的运行速度。 今天就让我们一起来看下让 Python 性能更高的 9 个小技巧 python学习资料分享(无偿)…

PXE自动平台 搭建 银河麒麟 UEFI x86_64 ARM64

1. PXE自动化 原理 要实现PXE自动安装需要以下组件: DHCP服务:服务器通过网络启动时自动分配IP地址。TFTP服务:提供服务器启动下载启动引导EFI。HTTP服务:操作系统镜像下载。 各组件工作原理如下[1]: 开PXE后&…