Linux usb bus日志如何打开,从linux usb bus节点来认识usb linux usb认识
首先從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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全身脱毛需要多少钱啊?
- 下一篇: windows和linux允许分片,请问