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設備,配置,接口,端點的關聯:
要想研究usb請讀usb協議吧,同時研究linux?kernel?usb代碼也是不錯的選擇。
總結
以上是生活随笔為你收集整理的Linux usb bus日志如何打开,从linux usb bus节点来认识usb linux usb认识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全身脱毛需要多少钱啊?
- 下一篇: 重庆看无精症最好的医院推荐