日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發(fā)布時(shí)間:2023/12/1 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux usb bus日志如何打开,从linux usb bus节点来认识usb linux usb认识 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先從linux dmesg來認(rèn)識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行l(wèi)og說明發(fā)現(xiàn)了Qualcomm?EHCI?Host?Controller這樣的usb?device,host?controller也屬于usb?device,同時(shí)給出了PID?VID等描敘信息。

注意從log上看出usb是從usb1開始并非其他的像mmc?i2c?bus是從0開始。任何usb?host?controller都是與hub同時(shí)存在,這里也不例外,1-0就是

hub,1-1:說明是在1?port上的,1-1:1.0也就是1 port上第一個(gè)接口。

比如電腦主機(jī)上前面的2個(gè)usb?port其實(shí)都是一個(gè)hub下面的,我的電腦主機(jī)usb1上的第5個(gè)端口掛了個(gè)hub,同時(shí)手機(jī)插在該hub上的第4個(gè)port,那么節(jié)點(diǎn)

該是啥樣?1-5.4:1. ?這些就是linux usb節(jié)點(diǎn)規(guī)范。

下面是我的主機(jī)給出的信息:

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節(jié)點(diǎn)信息:

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有一個(gè)endpoint 同時(shí)是輸入中斷類型:

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

下面的第一個(gè)port上節(jié)點(diǎn)信息,信息都是從usb?devices上獲取的descriptors,解析后有個(gè)pid?vid

Interface等,其中bNumInterfaces是9,從1-1:1.8/也說明是9個(gè)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對應(yīng)host的usb?driver?name為diag_bridge,那么上層可以操作該文件,與usb?devices

通信,注意本質(zhì)上是host端1-1\:1.0下面的endpoint與usb?device的對應(yīng)的endpoint通信,通信的數(shù)據(jù)流都是診斷信息,

該diag_bridge設(shè)備寫入的數(shù)據(jù)通過ep_01端點(diǎn)發(fā)送給usb_device,同時(shí)在端點(diǎn)ep_81讀取數(shù)據(jù),跑的都是diag_bridge管道數(shù)據(jù)流。

每個(gè)endpoint就如同一個(gè)高速串口一樣,這樣usb就是由許多高速串口構(gòu)成,這就是usb最大的特點(diǎn)。USB通信最基本的形式是通過端點(diǎn)(USB端點(diǎn)分中斷、批量、等時(shí)、控制四種,每種用途不同),除了endpoint?0(后面另說)

其他的端點(diǎn)只能是輸入或者輸出,這個(gè)在usb?device出廠前就定義好了,包括descriptors,還有一些usb設(shè)備descriptors

會有額外的信息,host端usb可以通過額外的信息獲取有價(jià)值的東西。DRIVER=diag_bridge這個(gè)是有Host端的驅(qū)動做好的,

driver匹配了對應(yīng)的PID?VID?interface0,也有match?PID?VID?bDeviceClass?bDeviceProtocol?bDeviceSubClass這些項(xiàng)的,

由廠家定。假如沒有driver?DRIVER這項(xiàng)就沒有。

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,端點(diǎn)0是一個(gè)特殊的endpoint,當(dāng)插入usb設(shè)備,host就是通過默認(rèn)的端點(diǎn)0獲取描敘符的,

端點(diǎn)0是usb設(shè)備缺省的配置,在host端沒有配置好該usb?device時(shí)使用端口0通信,當(dāng)配置好后有其他的endpoint還

可以使用端點(diǎn)0,端點(diǎn)0是雙向傳輸控制類型,這個(gè)可能許多人不知道。

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個(gè)設(shè)備,一個(gè)字符設(shè)備hsicctl0供AP與MODEM

傳輸控制類信息,比如DATA?CALL等等,還有一個(gè)net網(wǎng)卡也就是建在該driver上;

有個(gè)問題就來了該接口下面有3個(gè)端點(diǎn),而這里起碼有2類數(shù)據(jù),控制類命令與net?socket?buf數(shù)據(jù)流。

之前看了好幾次端點(diǎn)是怎么使用來分開傳輸?shù)摹:髞斫K于明白了,該接口下3個(gè)端點(diǎn)都是供usbnet使用的,一個(gè)輸入一個(gè)輸出(傳輸類型為bulk)

一個(gè)中斷。

那么data數(shù)據(jù)的端點(diǎn)呢?很明顯是端點(diǎn)0,同時(shí)仔細(xì)研究代碼確實(shí)是端口0,在8064上高通的qmi通道走的就是端點(diǎn)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設(shè)備,配置,接口,端點(diǎn)的關(guān)聯(lián):

要想研究usb請讀usb協(xié)議吧,同時(shí)研究linux?kernel?usb代碼也是不錯(cuò)的選擇。

總結(jié)

以上是生活随笔為你收集整理的Linux usb bus日志如何打开,从linux usb bus节点来认识usb linux usb认识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。