首页 > 其他分享 >Android Qcom USB Driver学习(七)

Android Qcom USB Driver学习(七)

时间:2024-08-23 14:04:12浏览次数:11  
标签:hdev HID Driver hid CONNECT Qcom Android define connect

最近遇到了USB 插拔后,系统重启的问题,抓取串口log发现如下问题,log中查看trace分析就是空指针造成的panic

Unable to handle kernel read from unreadable memory at virtual address 0000000000000000
Mem abort info:
  ESR = 0x96000005
  Exception class = DABT (current EL), IL = 32 bits
  EA = 0, S1PTW = 0
Data abort info:
  ISV = 0, ISS = 0x00000005
  CM = 0, WnR = 0
user pgtable: 4k pages, 39-bit VAs, pgdp = 00000000dd92c597
...
Workqueue: usb_hub_wq hub_event
pstate: 60400005 (nZCv daif +PAN -UAO)
pc : hidown_disconnect+0x2c/0x98
lr : hidown_disconnect+0x24/0x98
sp : ffffff800808b840
x29: ffffff800808b840 x28: ffffff91017008f8
...
Call trace:

这里PC已经解析出了出错位置hidown_disconnect+0x2c/0x98,如果能得到对应的address的话可以通过add2line解析到对应函数和行数

./aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-addr2line -f -e vmlinux ffffff800808b820

在之前在USB系列四学习到了usb Interface的接口类型有很多,那接触到这个usb驱动,发现usb hid的功能也是有分类,有以下几种

/kernel/msm-4.19/include/linux/hid.h

#define HID_CLAIMED_INPUT	BIT(0)
#define HID_CLAIMED_HIDDEV	BIT(1)
#define HID_CLAIMED_HIDRAW	BIT(2)
#define HID_CLAIMED_DRIVER	BIT(3)

/*
* HID connect requests
*/

#define HID_CONNECT_HIDINPUT		BIT(0)
#define HID_CONNECT_HIDINPUT_FORCE	BIT(1)
#define HID_CONNECT_HIDRAW		BIT(2)
#define HID_CONNECT_HIDDEV		BIT(3)
#define HID_CONNECT_HIDDEV_FORCE	BIT(4)
#define HID_CONNECT_FF			BIT(5)
#define HID_CONNECT_DRIVER		BIT(6)
#define HID_CONNECT_DEFAULT	(HID_CONNECT_HIDINPUT|HID_CONNECT_HIDRAW| \
		HID_CONNECT_HIDDEV|HID_CONNECT_FF)

这里看到有clamied和connect_mask,感觉功能有重复,为什么会出现这样呢?

kernel/msm-4.19/drivers/hid/hid-own.c     hidraw不需要进行hid parse,可以直接传输raw原始数据
	hdev->claimed = HID_CLAIMED_HIDRAW;
	hdev->quirks = HID_QUIRK_NO_INIT_REPORTS;
	error = hid_hw_start(hdev, 0);           // mask = 0
	hdev->claimed = 0;

kernel/msm-4.19/drivers/hid/hid-multitouch.c
	hid_hw_start(hdev, HID_CONNECT_DEFAULT); // mask = HID_CONNECT_DEFAULT


int hid_hw_start(struct hid_device *hdev, unsigned int connect_mask)
	int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
		if ((connect_mask & HID_CONNECT_HIDRAW) && !hidraw_connect(hdev))
                hdev->claimed |= HID_CLAIMED_HIDRAW;

		if (hdev->claimed & HID_CLAIMED_HIDRAW)
                len += sprintf(buf + len, "%shidraw%d", len ? "," : "",
                                ((struct hidraw *)hdev->hidraw)->minor);


hid-input.c
	hidinput_connect + hidinput_configure_usage 注册输入设备,配置输入接口	
usbhid/hiddev.c
	hiddev_connect 将hid device连接到hiddev driver
hidraw_connect
	hidraw.c 接受所有的hid device设备,注册到/sys/class/hidraw/hidrawx

通过上述我个人理解的connect_mask与hdev->claimed应该功能区别不大,connect_mask最终也是决定claimed的内容。

标签:hdev,HID,Driver,hid,CONNECT,Qcom,Android,define,connect
From: https://www.cnblogs.com/linhaostudy/p/18375873

相关文章

  • Android Qcom USB Driver学习(六)
    眼图基础知识与详解10分钟教会你看眼图USB2.0HUB眼图调试经验总结一篇文章教你如何全面了解眼图测试!预加重与去加重对眼图的影响关于USB通信阻抗匹配的问题硬件调试——眼图几个经典案例眼图常见问题分析包含双眼皮的情况PHYTunningdevicetree:qusb_phy0:qusb@1613......
  • 容器设置日志驱动程序 - docker --log-driver
    环境:在创建docker时候遇到该异常信息:docker:Errorresponsefromdaemon:logger:nologdrivernamed'local'isregistered.在linux系统下使用docker进行容器创建时候,一般情况下会对docekr的日志驱动做设置,以避免文件过大导致磁盘占满的情况,如下记录自己的一些经理,希望对朋......
  • 【Android笔记】Android APK编译打包流程
    前言本文将介绍Android从一个项目打包成APK的过程,其中涉及AndroidJava和Kotlin文件、资源文件、清单文件、依赖jar包和so库等在打包过程中处理。步骤总体的打包流程如下图,下面就介绍下详细的打包步骤。1、将aidl文件编译成java文件在构建过程中,Gradle会调用AIDL编......
  • Android逆向(七) 解密COCOS游戏lua脚本-第1篇
    目录一、系统环境二、详细分析前言:1.lua脚本是什么?2.为什么游戏开发要用lua脚本?正文:获取Lua脚本的几种方法:1.直接在assets目录提取2.在luaL_loadbuffer函数处获取3.在底层的reader函数处获取1.静态分析2.动态分析一、系统环境OS:Windows_NTx6410.0......
  • HTC 10 刷系统 LineageOS 19.1 Android 12
    解锁手机解锁会导致数据全部清除,注意保存Bootloader解锁,S-ON可以不用解锁(好像可以绕过解锁安装twrp,暂时没尝试)HTC官方UnlockBootloaderHTCDesire20pro可以不通过官方网站解锁adbrebootbootloader#进入bootloadersudofastbootflashingunlock#选择UNLOC......
  • 深入理解Android MTP之存储映射分析
    深入理解AndroidMTP之UsbService启动分析 分析了MTP的服务端的启动,本文来分析切换MTP模式后,存储中的数据(文件、目录)是如何映射到PC端的。首先你得知道如何切换MTP模式。当手机通过usb连接电脑时,会出现一个关于usb的通知,点击通知后,会出现一个类似如下的界面这个FileTransfe......
  • android调用h5代码步骤
    要在Android应用中调用H5代码,可以使用WebView来加载并执行H5代码。以下是一个简单的示例:首先,在你的Android项目中的布局文件中添加一个WebView组件:```xml<WebView  android:id="@+id/webview"  android:layout_width="match_parent"  android:layout_height="......
  • 免费【2024】springboot 基于Android的个人财务系统的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 免费【2024】基于Android的房屋租赁App的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 免费【2024】基于Android的房屋租赁App的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......