首先从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设备,配置,接口,端点的关联:

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

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

  1. ftp文件服务器登录日志,linux ftp服务器日志

    linux ftp服务器日志 内容精选 换一换 为加强对系统数据的容灾管理,云堡垒机支持配置日志备份,提高审计数据安全性和系统可扩展性.本小节主要介绍如何在系统配置FTP/SFTP服务器参数,将日志远 ...

  2. linux usb gadget 日志

    1,USB 协议入门 几种USB控制器类型:OHCI,UHCI,EHCI,XHCI 遇到过一些关于USB的东西(如下),一直没搞明白什么USB1.0/1.1/2.0/3.0之类的,当然我知道它们的各自 ...

  3. linux的错误日志在哪里,在linux中怎么查看错误日志

    cat或者 tail -f命令 日 志 文 件 说 明 /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 /var/log/secure 与 ...

  4. linux内核串口日志抓取-minicom工具使用方法

    linux抓串口日志 抓串口日志方式 minicom保存串口日志log 抓取主板串口日志 minicom man手册 抓串口日志方式 1) 问题机上,找到串口设备,比如/dev/ttyAMA[0,1, ...

  5. Linux 下高级日志文件查看器Log File Navigator

    Log File Navigator,简称lnav,是一款面向小规模的适用于 Linux 的高级日志文件查看器.它是一个终端应用程序,可以理解您的日志文件,让您轻松找到问题,几乎不需要什么设置. ln ...

  6. Linux中的日志系统介绍

    一.常见的日志 日志是一个系统管理员,一个运维人员,甚至是开发人员不可或缺的东西,系统用久了偶尔也会出现一些错误,我们需要日志来给系统排错,在一些网络应用服务不能正常工作的时候,我们需要用日志来做问题 ...

  7. 《构建高可用Linux服务器 第3版》—— 1.4 Linux服务器的日志管理

    本节书摘来自华章出版社<构建高可用Linux服务器 第3版>一 书中的第1章,第1.4节,作者:余洪春 ,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.4 ...

  8. linux日志按照时间切割,Linux下把tomcat日志按日期自动分割

    Linux中tomcat日志分割需要用到cronolog 附上cronolog-1.6.2.tar.gz 1. 安装cronolog tar –zxvf cronolog-1.6.2.tar.gz . ...

  9. 在Linux上建立日志服务器的问题

    前天安排了一个任务,要在一台服务器上搭建日志服务器,作用是记录本网段所有服务器的日志,我们这个网段包括WWW.DNS.Mail.计费.Video.电子政务等十几台服务器,系统包括Windows2000 ...

最新文章

  1. 5分钟掌握手动优化机器学习模型超参数
  2. VUE:class与style强制绑定
  3. c++同一屏幕输出多种颜色字体
  4. HDU 1517 A Multiplication Game
  5. How do I sort groups of data items?(WPF)
  6. 树莓派 RespberryPi:通过命令行关机 / 重启
  7. python跨目录调用_python 跨目录访问文件
  8. Python maximum recursion depth exceeded while calling a Python object (gevent的SSL无限递归错误)的问题解决
  9. tomcat 开启 https 使用apr
  10. 2020 金山云 面经
  11. 基于javaweb的宠物医院管理系统
  12. Vosviewer图谱相关指标详细解释1
  13. 初学java,有哪些值得推荐的 Java 练手项目?
  14. Lstm(循环神经网络)
  15. 新网漫时代下的国漫“哥伦布”征程
  16. 图像匹配论文总结(一)
  17. 阵列win不识别linux识别,解决Raid模式下重装系统无法识别固态硬盘的问题
  18. QuickCHM V2.6注册码
  19. windows server 2016 安装openssh
  20. debian linux系统安装教程,Debian 10(Buster)安装过程图文详解

热门文章

  1. jsoup 获取html中body内容_Java 进阶 利用Jsoup获取HTML页面的各分页中的标题信息...
  2. 汽车电子专业知识篇(四)-一文详解无人驾驶中的各种感知传感器
  3. 少儿编程150讲轻松学Scratch(十二)-用Scratch制作石头剪子布游戏
  4. argparse模块_Argparse:一个具体案例教会你python命令行参数解析
  5. gromacs 安装_带你入门带你飞 gromacs材料计算模拟系列
  6. vue如何过滤html标签,去除富文本中的html标签及vue、react、微信小顺序中的过滤器...
  7. matlab导入txt生成曲面,求助:怎样将txt的数据导入到Matlab中并根据参数画出波形...
  8. java后端工程师平时开发或多或少会用到eclipse,那么它有哪些快捷键呢
  9. CSS3里的display
  10. react-性能优化