最近遇到了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的内容。

Android Qcom USB Driver学习(七)的更多相关文章

  1. Android破解心得——记学习七少月安卓大型安全公开课

    第一课 讲解了关于在安卓破解之中环境的配置及所需要用到的软件,重要的软件是Androidkiller,安卓逆向助手 第二课讲解了java与smali的关系,从smail角度详细的分析了一个简单的Hel ...

  2. Delphi 调试连接 任意Android手机/平板/盒子(要安装Google USB Driver,并且还有USB的相关许多文章)

    Delphi有时候无法连接调试一些手机,解决方案: 1.安装Google USB Driver 2.通过设备管理器查看手机或平板USB的VID,PID 3.修改你的电脑上的android_winusb ...

  3. CVE-2016-2502-drivers/usb/gadget/f_serial.c in the Qualcomm USB driver in Android. Buffer Overflow Vulnerability reported by #plzdonthackme, Soctt.

    CVE-2016-2502-drivers/usb/gadget/f_serial.c in the Qualcomm USB driver in Android.Buffer Overflow Vu ...

  4. Android自动化测试之Monkeyrunner学习笔记(一)

    Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...

  5. Android Wear(手表)开发 - 学习指南

    版权声明:欢迎自由转载-非商用-非衍生-保持署名.作者:Benhero,博客地址:http://www.cnblogs.com/benhero/ Android Wear开发 - 学习指南 http: ...

  6. Android 高级控件(七)——RecyclerView的方方面面

    Android 高级控件(七)--RecyclerView的方方面面 RecyclerView出来很长时间了,相信大家都已经比较了解了,这里我把知识梳理一下,其实你把他看成一个升级版的ListView ...

  7. Android群英传笔记——第七章:Android动画机制和使用技巧

    Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最 近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中 ...

  8. Android 音视频开发学习思路

    Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的.只能通过一点点的学习和积累把这块的知识串联积累起来. 初级入门篇: Android 音视频开发(一) ...

  9. MyBatis学习七:spring和MyBatis整合

    <\mybatis\day02\16mybatis和spring整合-sqlSessionFactory配置.avi;> MyBatis学习七:spring和MyBatis整合.逆向工程 ...

  10. Head First Android --- Enable USB debugging on your device

    1. Enable USB debugging on your device    On your device, open “Developer options” (in Android 4.0 o ...

随机推荐

  1. 【Vue】05 Webpack

    Webpack是一个现代JS应用的静态模块打包的工具 学习Webpack需要我们安装NodeJS 配置CNPM & CRM 使用切换镜像的方式配置:[不建议] npm config set r ...

  2. ubuntu18.04 源码方式安装wine , 警告,libxrender 64-bit development files not found, XRender won't be supported.

    警告信息: configure: WARNING: libxrender 64-bit development files not found, XRender won't be supported. ...

  3. 英语.Net多语言开发中的问题

    问题与现象 多语言开发是一件成本很高的事情. 很多公司会退而求其次选择只开发英文版本的软件分发到不同国家,但这里仍存在不同问题. 我们就遇到了这样的问题,参考下面的代码. CultureInfo cu ...

  4. 最佳实践:解读GaussDB(DWS) 统计信息自动收集方案

    摘要:现在商用优化器大多都是基于统计信息进行查询代价评估,因此统计信息是否实时且准确对查询影响很大,特别是分布式数据库场景.本文详细介绍GaussDB(DWS)如何实现了一种轻量.实时.准确的统计信息 ...

  5. vue开发者工具dev-tool的安装

    1.下载网址:https://github.com/Redxym/dev-tools 2.谷歌浏览器->扩展程序,拖动刚刚下载好的压缩包,将chrome文件夹添加至'加载已解压的扩展程序' // ...

  6. Java基础之占位符(2)

  7. Java类和对象 小白版

    一.类 一.类的定义 具有同种属性的对象称为类.定义了它所包含的全体对象的公共特征和功能,对象就是类的一个实例化. 类的三种常见成员:属性.方法.构造器 二.类的编写 1.类名的定义: 2.类属性(特 ...

  8. QT中TreeWidget树控件的使用

    关于Item Widgets中Tree Widget的使用方法! TreeWidget树控件的使用 创建列表头, 该控件有什么属性 QStringList header_list; header_li ...

  9. Unreal使用GooglePAD生成AAB包,并加在fast-follow资源

    1.修改obbfilter,设置需要添加到obb的pak文件 2.修改项目设置,打AAB包 3.cook stage生成所有Paks文件 4.将部分pak文件拷贝到Intermediate/Andro ...

  10. java_可变参数&增强for循环

    代码比较无厘头,记录看懂的意思 在可变参数的构造方法中,需要使用增强for循环遍历 public class name { String sex; public static void main(St ...