Linux usb bus日志如何打开,从linux usb bus节点来认识usb linux usb认识

首先从linux dmesg来认识usb:

<6>[   19.610046] msm_hsic_host msm_hsic_host: Qualcomm EHCI Host Controller using HSIC

<6>[   19.620391] msm_hsic_host msm_hsic_host: new USB bus registered, assigned bus number 1

<6>[   19.659942] msm_hsic_host msm_hsic_host: irq 261, io mem 0x12510000

<6>[   19.679931] msm_hsic_host msm_hsic_host: USB 2.0 started, EHCI 1.00

<6>[   19.685363] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002

<6>[   19.699890] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1

<6>[   19.706085] usb usb1: Product: Qualcomm EHCI Host Controller using HSIC

<6>[   19.729888] usb usb1: Manufacturer: Linux 3.4.0-svn9114 ehci_hcd

<6>[   19.734863] usb usb1: SerialNumber: msm_hsic_host

<6>[   19.750549] hub 1-0:1.0: USB hub found

<6>[   19.753295] hub 1-0:1.0: 1 port detected

<6>[   20.809967] usb 1-1: new high-speed USB device number 2 using msm_hsic_host

<6>[   20.882781] usb 1-1: New USB device found, idVendor=05c6, idProduct=9048

<6>[   20.888427] usb 1-1: New USB device strings: Mfr=3, Product=2, SerialNumber=0

<6>[   20.899902] usb 1-1: Product: Qualcomm CDMA Technologies MSM

<6>[   20.904541] usb 1-1: Manufacturer: Qualcomm, Incorporated

<6>[   20.947814] rmnet_usb 1-1:1.5: rmnet_usb0: register 'rmnet_usb' at usb-msm_hsic_host-1, RmNET net device, f2:a7:5f:22:49:61

<6>[   20.960266] rmnet_usb 1-1:1.6: rmnet_usb1: register 'rmnet_usb' at usb-msm_hsic_host-1, RmNET net device, f2:a7:5f:22:49:61

<6>[   21.062225] rmnet_usb 1-1:1.7: rmnet_usb2: register 'rmnet_usb' at usb-msm_hsic_host-1, RmNET net device, f2:a7:5f:22:49:61

<6>[   21.181701] rmnet_usb 1-1:1.8: rmnet_usb3: register 'rmnet_usb' at usb-msm_hsic_host-1, RmNET net device, f2:a7:5f:22:49:61

首先说明该usb接口是干吗的?apq8064与mdm 9x15通信的接口;

上面前9行log说明发现了Qualcomm EHCI Host Controller这样的usb device,host controller也属于usb device,同时给出了PID VID等描叙信息。

注意从log上看出usb是从usb1开始并非其他的像mmc i2c bus是从0开始。任何usb host controller都是与hub同时存在,这里也不例外,1-0就是

hub,1-1:说明是在1 port上的,1-1:1.0也就是1 port上第一个接口。

比如电脑主机上前面的2个usb port其实都是一个hub下面的,我的电脑主机usb1上的第5个端口挂了个hub,同时手机插在该hub上的第4个port,那么节点

该是啥样?1-5.4:1. ?这些就是linux usb节点规范。

下面是我的主机给出的信息:

root@hd:~$ ls /sys/bus/usb/devices/1-5.4/

1-5.4:1.0/           avoid_reset_quirk    bMaxPacketSize0      dev                  ltm_capable          removable            version

1-5.4:1.1/           bcdDevice            bMaxPower            devnum               manufacturer         remove

1-5.4:1.2/           bConfigurationValue  bNumConfigurations   devpath              maxchild             serial

1-5.4:1.3/           bDeviceClass         bNumInterfaces       driver/              port/                speed

1-5.4:1.4/           bDeviceProtocol      busnum               ep_00/               power/               subsystem/

1-5.4:1.5/           bDeviceSubClass      configuration        idProduct            product              uevent

authorized           bmAttributes         descriptors          idVendor             quirks               urbnum

回归到上面的正题上来:下面是hub节点信息:

cat /sys/bus/usb/devices/1-0\:1.0/uevent                                       <

DEVTYPE=usb_interface

DRIVER=hub

PRODUCT=1d6b/2/304

TYPE=9/0/1

INTERFACE=9/0/0

MODALIAS=usb:v1D6Bp0002d0304dc09dsc00dp01ic09isc00ip00in00

下面信息说明HUB有一个endpoint 同时是输入中断类型:

root@android:/ # cat /sys/bus/usb/devices/1-0\:1.0/

bAlternateSetting         bNumEndpoints             subsystem/

bInterfaceClass           driver/                   supports_autosuspend

bInterfaceNumber          ep_81/                    uevent

bInterfaceProtocol        modalias

bInterfaceSubClass        power/

root@android:/ # cat /sys/bus/usb/devices/1-0\:1.0/ep_81/direction

in

root@android:/ # cat /sys/bus/usb/devices/1-0\:1.0/ep_81/type

Interrupt

下面的第一个port上节点信息,信息都是从usb devices上获取的descriptors,解析后有个pid vid

Interface等,其中bNumInterfaces是9,从1-1:1.8/也说明是9个Interface,speed 480也就是usb2.0的

速率。

root@android:/ # cat /sys/bus/usb/devices/1-1/

1-1:1.0/            bConfigurationValue configuration       power/

1-1:1.1/            bDeviceClass        descriptors         product

1-1:1.2/            bDeviceProtocol     dev                 quirks

1-1:1.3/            bDeviceSubClass     devnum              removable

1-1:1.4/            bMaxPacketSize0     devpath             remove

1-1:1.5/            bMaxPower           driver/             speed

1-1:1.6/            bNumConfigurations  ep_00/              subsystem/

1-1:1.7/            bNumInterfaces      idProduct           uevent

1-1:1.8/            bcdDevice           idVendor            urbnum //5850

authorized          bmAttributes        manufacturer        usb_device/

avoid_reset_quirk   busnum              maxchild            version

再看下面的1-1\:1.0对应host的usb driver name为diag_bridge,那么上层可以操作该文件,与usb devices

通信,注意本质上是host端1-1\:1.0下面的endpoint与usb device的对应的endpoint通信,通信的数据流都是诊断信息,

该diag_bridge设备写入的数据通过ep_01端点发送给usb_device,同时在端点ep_81读取数据,跑的都是diag_bridge管道数据流。

每个endpoint就如同一个高速串口一样,这样usb就是由许多高速串口构成,这就是usb最大的特点。USB通信最基本的形式是通过端点(USB端点分中断、批量、等时、控制四种,每种用途不同),除了endpoint 0(后面另说)

其他的端点只能是输入或者输出,这个在usb device出厂前就定义好了,包括descriptors,还有一些usb设备descriptors

会有额外的信息,host端usb可以通过额外的信息获取有价值的东西。DRIVER=diag_bridge这个是有Host端的驱动做好的,

driver匹配了对应的PID VID interface0,也有match PID VID bDeviceClass bDeviceProtocol bDeviceSubClass这些项的,

由厂家定。假如没有driver DRIVER这项就没有。

root@android:/ # cat  /sys/bus/usb/devices/1-1/1-1\:1.0/uevent

DEVTYPE=usb_interface

DRIVER=diag_bridge

PRODUCT=5c6/9048/0

TYPE=0/0/0

INTERFACE=255/255/255

MODALIAS=usb:v05C6p9048d0000dc00dsc00dp00icFFiscFFipFFin002

再下看下面的endpoint 0,端点0是一个特殊的endpoint,当插入usb设备,host就是通过默认的端点0获取描叙符的,

端点0是usb设备缺省的配置,在host端没有配置好该usb device时使用端口0通信,当配置好后有其他的endpoint还

可以使用端点0,端点0是双向传输控制类型,这个可能许多人不知道。

root@android:/ # cat sys/bus/usb/devices/1-1/ep_00/                                                <

bEndpointAddress    bmAttributes        power/              wMaxPacketSize

bInterval           direction           type

bLength             interval            uevent

再看下面的1-1\:1.5,interface 5 rmnet_usb driver,该driver上有2个设备,一个字符设备hsicctl0供AP与MODEM

传输控制类信息,比如DATA CALL等等,还有一个net网卡也就是建在该driver上;

有个问题就来了该接口下面有3个端点,而这里起码有2类数据,控制类命令与net socket buf数据流。

之前看了好几次端点是怎么使用来分开传输的。后来终于明白了,该接口下3个端点都是供usbnet使用的,一个输入一个输出(传输类型为bulk)

一个中断。

那么data数据的端点呢?很明显是端点0,同时仔细研究代码确实是端口0,在8064上高通的qmi通道走的就是端点0。

root@android:/ # cat /sys/bus/usb/devices/1-1/1-1\:1.5/uevent

DEVTYPE=usb_interface

DRIVER=rmnet_usb

PRODUCT=5c6/9048/0

TYPE=0/0/0

INTERFACE=255/255/255

MODALIAS=usb:v05C6p9048d0000dc00dsc00dp00icFFiscFFipFFin05

再看下图是usb设备,配置,接口,端点的关联:

0818b9ca8b590ca3270a3433284dd417.png

要想研究usb请读usb协议吧,同时研究linux kernel usb代码也是不错的选择。

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

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

相关文章

Spring面试问题

还可以查看我们最新的文章69Spring面试问答-最终名单 。 1&#xff09;什么是春天&#xff1f; 回答&#xff1a; Spring是控件和面向方面的容器框架的轻量级转换。 2&#xff09;解释春天&#xff1f; 回答&#xff1a; 轻巧&#xff1a;在尺寸和透明度方面&#xff0c; S…

201771010120 苏浪浪 《面向对象程序设计(java)》第二周学习总结

理论知识总结 第三章Java基本程序设计结构 1、基本知识&#xff1a;&#xff08;1&#xff09;标识符&#xff1a;是由字母、下划线、美元符号和数字组成&#xff0c;且第一个符号不能为数字。&#xff08;2&#xff09;关键字&#xff1a;剧啊语言中被赋予特定意义的一些单词。…

Apache Camel简介

Apache Camel是著名的企业集成模式的开源实现。 Camel是一个路由和中介引擎&#xff0c;可以帮助开发人员以各种领域特定语言&#xff08;DSL&#xff09;&#xff08;例如Java&#xff0c;Spring / XML&#xff0c;scala等&#xff09;创建路由和中介规则。 骆驼用途广泛 Cam…

qt结构体嵌套结构体方法_9.2 C++结构体类型变量

C定义结构体类型变量的方法 1、先声明结构体类型再定义变量名&#xff0c;在定义了结构体变量后&#xff0c;系统会为之分配内存单元。struct Student{ //自定义结构体变量int num;//学号char sex;//性别int age;//年龄};2、在声明类型的同时定义变量 一般形式为struct 结构体名…

Vue解析--如何应对面试官提问

近期不断面试中&#xff0c;面试官都会提一些关于Vue相关的源码和“全家桶”之类的问题。那么针对这些提问&#xff0c;我们应该如何更好应答呢&#xff1f;在这里我把对Vue的理解整理出来供大家来参考。 1.Vue是什么&#xff1f; Vue是一套构建用户界面的渐进式框架&#xf…

Java开发人员的Erlang

您可能没有注意到&#xff0c;但是距离我上次发布博客已经过去了几个星期。 原因是我的Soleus骨折了&#xff0c;而我的腿也石膏了。 不能动弹&#xff0c;我认为调查完全不同的东西是个好主意–要么看那天的电视&#xff0c;要么&#xff0c;尽管Kojak和Magnum PI的重播很诱人…

20165339第六周学习总结

课本知识点总结 第八章 String类 使用String类声明对象并创建对象 String s new String("We are students"); String t new String("We are students"); String (char a[])用一个字符数组a创建一个String对象 char a[] {J,a,v,a}; String s new String(a)…

keil5用jlink不到芯片_洛达芯片检测

安卓手机下载一个络达官方的刷机软件然后连接上耳机&#xff0c;打开软件&#xff0c;就可以看到耳机芯片的相关信息。软件下载地址&#xff1a;https://pan.baidu.com/s/1MOXjkHv1wfxWWIVdcsMSFg 提取码: tasc我们的耳机都是络达芯片&#xff0c;不怕你检测&#xff0c;希望用…

层次和约束:项目中使用vuex的3条优化方案

问题描述 使用vuex的store的过程中&#xff0c;发现了一些不是很优雅的地方&#xff1a; store层module太多&#xff0c;找state、getter、mutation、action对应的module比较慢。 组件里面mapGetters、mapActions、mapMutations过多&#xff0c;分不清getter、action、mutati…

怎么让员工服从管理_为什么现在的员工执行力和服从性越来越差,管理一严格就辞职?...

当有负面情绪的时候&#xff0c;不要说。管好自己的嘴&#xff0c;有时候做哑巴&#xff0c;是一种境界。现在的企业很多都存在这个问题&#xff0c;员工执行力越来越差&#xff0c;服从性也越来越差&#xff0c;管理者稍微一严格&#xff0c;员工就会辞职走人&#xff0c;留不…

Spring Data REST的实际应用

什么是春天数据休息&#xff1f; spring-data-rest是spring-data项目的新增功能&#xff0c;它是一个框架&#xff0c;可帮助您将实体直接作为RESTful Web服务端点公开。 与rails&#xff0c;grails或roo不同&#xff0c;它不会生成任何实现此目标的代码。 spring data-rest支持…

2018上半年掘金微信群日报优质文章合集:前端篇

在掘金微信交流群里的小伙伴们&#xff0c;你们每天都还在坚持读小报吗&#xff1f;如果你的回答是yes&#xff0c;那真的要给你点一万个赞了?能坚持这么久&#xff0c;真的很优秀噢&#xff01;&#xff08;嗯&#xff0c;每天坚持给大家收集文章的小饼也很优秀?&#xff09…

linux运维笔试题目,linux运维相关的笔试题目_笔试题目

一、Linux系统和shell1、写一个sed命令&#xff0c;修改/tmp/input.txt文件的内容&#xff0c;要求&#xff1a;①删除所有空行&#xff1b;②在非空行前面加一个“AAA”&#xff0c;在行尾加一个“BBB”&#xff0c;即将内容为“11111”的一行改为&#xff1a;“AAA11111BBB”…

python之路--day17-shelve,xml和re模块

shelve模块 shelve模块只有一个open函数&#xff0c;返回类似字典的对象&#xff0c;可读可写&#xff0c;key必须为字符串&#xff0c;而值可以是python所支持的数据类型 1 import shelve2 # info1{age:18,height:180,weight:80}3 # info2{age:73,height:150,weight:80}4 #5 #…

20172314 2018-2019-1《程序设计与数据结构》第一周学习总结

教材学习内容总结 概述 软件工程&#xff1a;是一门关于高质量软件开发的技术和理论的学科&#xff0c;用来控制开发过程&#xff0c;实现高质量的软件。软件工程的目标&#xff1a;正确性、可靠性、健壮性、可用性、可维护性、可重用性、可移植性、运行效率。 对于可靠性和健壮…

activiti api文档_【白银人机】Activiti 工作流从入门到入土:完整 hello world 大比拼(API 结合实例讲解)...

点击上方“好好学java”&#xff0c;选择“置顶”公众号重磅资源、干货&#xff0c;第一时间送达重磅推荐 ① 纯福利 | 公众号资源大汇总&#xff0c;一年才一次&#xff01;② 重磅&#xff01;&#xff01;2018年Java全套入门到进阶学习视频及项目实战③ 2018年java架构师学习…

前端解读控制反转(IOC)

前言 随着前端承担的职责越来越重&#xff0c;前端应用向着复杂化、规模化的方向发展。大型项目模块化是一种趋势&#xff0c;不可避免模块之间要相互依赖&#xff0c;此外还有很多第三方包。这样的话如何去管理这些繁杂的文件&#xff0c;是一个不可避免的话题。此时作为一种…

ASP.NET MVC传递参数(model), 如何保持TempData的持久性

一看到此标题&#xff0c;相信你也会。因为路由是可以从URL地址栏传过去的。但是Insus.NET不想在地址栏传递&#xff0c;还是一个条件是jQuery的Ajax进行POST的。Insus.NET不清楚别人是怎样处理的&#xff0c;但是这个让Insus.NET花上不少时间来解决。Insus.NET实现的方法也很简…

深度学习语音降噪方法对比_人工智能-关于深度学习的基础方法

深度学习概述深度学习的一些简介&#xff0c;其要点如下&#xff1a;深度学习实际上是基于具有多个隐藏层的神经网络的学习&#xff1b;深度学习的思想来源于人类处理视觉信息的方式&#xff1b;深度学习的发展得益于数据的井喷和计算力的飙升&#xff1b;深度学习的理论基础依…

通过adb巧用monkey获取android设备中所有应用的主activity

由于工作需要&#xff0c;想获取所有应用的activity(这里仅限应用的主入口Launcher activity)&#xff0c;搜索了一下&#xff0c;网上实现的方案都是基于android编程实现的&#xff0c;对于不懂开发的测试来说稍有难度&#xff0c;而且对于PC端测试工具来说可行性略差。 给大家…