Android通过cat /sys/kernel/debug/usb/devices获取USB信息
cat /sys/kernel/debug/usb/devices得到的信息如下
下圖是我們產(chǎn)品USB 拓?fù)鋱D
?
USB設(shè)備通過(guò)debugfs導(dǎo)出/sys/kernel/debug/usb/devices顯示內(nèi)核已知的每個(gè)USB設(shè)備及其配置描述符,比如下面EHCI控制器的信息
每個(gè)設(shè)備debugfs文件系統(tǒng)對(duì)應(yīng)的文件內(nèi)容包含有如下內(nèi)容:
T = Topology (etc.)拓?fù)浣Y(jié)構(gòu)
B = Bandwidth (applies only to USB host controllers, which are
??? virtualized as root hubs)帶寬信息,只用于USB Host控制器,它被虛擬為一個(gè)root hub
D = Device descriptor info.設(shè)備描述符信息
P = Product ID info. (from Device descriptor, but they won't fit
??? together on one line)產(chǎn)品ID信息,來(lái)至于設(shè)備描述符。
S = String descriptors.字符串描述符
C = Configuration descriptor info. (* = active configuration)配置描述符信息
I = Interface descriptor info.接口描述符信息
E = Endpoint descriptor info.端點(diǎn)描述符信息
?
T:? Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=? 1 Spd=480? MxCh= 1
Bus:表示總線號(hào)。
Lev:表示此USB設(shè)備位于所在總線拓?fù)浣Y(jié)構(gòu)的層次,見(jiàn)圖1,EHCI控制器對(duì)應(yīng)的Lev=00,其下面掛接的HUB的Lev=01,掛載在HUB下的USB網(wǎng)卡的Lev=02。
Prnt:表示父設(shè)備數(shù)量,比如EHCI控制器是root,位于最頂層,其Prnt=0,其下面掛接的HUB的Prnt=01,掛載在HUB下的USB網(wǎng)卡的Prnt=02(包括EHCI控制器和HUB)。
Port:此USB設(shè)備的父設(shè)備上的連接器/端口,比如HUB的父設(shè)備是EHCI控制器
For reasons lost in the mists of time, the Port number is always
??? too low by 1(意思是從0開(kāi)始).? For example, a device plugged into port 4 will
??? show up with "Port=03".
EHCI是第1層:Port=00。
HUB是第2層:為Port=00:其父設(shè)備是EHCI,而且只有一個(gè),根據(jù)規(guī)則(端口號(hào)從0開(kāi)始編號(hào)),所以也是0
USB攝像頭、USB網(wǎng)卡和U盤是第3層:port的值分別是00、01、02。
?
Cnt:這層的枚舉到的第幾個(gè)USB設(shè)備,比如USB攝像頭的Cnt=01,USB網(wǎng)卡的Cnt=02,U盤的Cnt=03。
?
Dev:表示設(shè)備編號(hào),EHCI為1,HUB為2,USB網(wǎng)卡為3,U盤為4,按順序排列的,一個(gè)總線上最多掛127個(gè);可以有多個(gè)總線。
Spd:設(shè)備速率,單位為Mbps
可能的速率為
??? 1.5?? Mbit/s for low speed USB
?????? 12??? Mbit/s for full speed USB
?????? 480? Mbit/s for high speed USB (added for USB 2.0);
????????????? ? also used for Wireless USB, which has no fixed speed
?????? 5000?????? Mbit/s for SuperSpeed USB (added for USB 3.0)
MxCh:當(dāng)前設(shè)備可連接的子設(shè)備最大數(shù)量,比如EHCI的MxCh=1表示EHCI下可以連接一個(gè)USB設(shè)備;HUB的MxCh=4表示此HUB可最多連接4個(gè)USB設(shè)備;USB網(wǎng)卡的MxCh=0表示它下面不能連接USB設(shè)備了,也就是最底層。
?
2.B帶寬信息
Alloc:該總線分配得到的帶寬。寬帶分配在使用中是一個(gè)近似值,此值表示一幀需要多少ms。
Int:中斷請(qǐng)求數(shù)
Iso:同步請(qǐng)求數(shù),USB有四大傳輸,中斷、控制、批量和同步。
?
3. D設(shè)備描述符信息
Ver:USB協(xié)議版本,比如Ver=2.00。
Cls:由USB-IF(USB Implementers Forum)分配的設(shè)備類類碼,Hub對(duì)應(yīng)09;廠家自定義的為ff;如果該字段為0x00,表示由接口描述符bInterfaceClass來(lái)指定。
?
官方鏈接:https://www.usb.org/defined-class-codes
?
Cls=08h,可知是Mass Storage類
Sub:設(shè)備子類,USB子類代碼,由USB-IF分配。
Prot:設(shè)備協(xié)議碼,由USB-IF分配。如果D的Cls和Sub都為00,則該字段也必須為00,采用I的Prot=50。
MxPs:默認(rèn)斷電的最大包大小,只有8、16、32或64有效。
Cfgs:表示設(shè)備支持的配置數(shù)量。僅表示當(dāng)前運(yùn)行速度下的配置數(shù)量。計(jì)數(shù)中不包括其他運(yùn)行速度的配置。 如果特定速度的設(shè)備有特定配置,則bNumConfigurations字段僅反映單個(gè)速度的配置數(shù)量,而不是兩個(gè)速度的配置總數(shù)量。這里的EHCI、HUB、USB網(wǎng)卡和U盤下的Cfgs都是1,因?yàn)橹皇褂昧艘粋€(gè)配置,所以設(shè)置為1
?
4. P產(chǎn)品ID信息
Vendor:廠商ID,比如ECHI的vendor=1d6b
ProdID:廠商產(chǎn)品的ID,比如ECHI的ProdID=0002表示支持USB2.0的產(chǎn)品。
Rev:產(chǎn)品版本號(hào),比如3.18這里指linux內(nèi)核版本。
USB-IF為廠商分配的vendor和product ID的鏈接http://www.linux-usb.org/usb.ids。
5.?S字符串描述符信息
Manufacturer:從設(shè)備中讀到的生產(chǎn)商描述性信息,比如USB網(wǎng)卡Manufacturer=ASIX Elec. Corp.
Product:從設(shè)備中讀取的產(chǎn)品描述性信息,比如USB網(wǎng)卡Product=AX88772B,比如EHCI控制器的Product=EHCI Host Controller,這在kernel\msm-3.18\drivers\usb\host\ehci-hcd.c中定義。
SerialNumber:從設(shè)備中讀取的產(chǎn)品序列號(hào)
?
6. C配置描述符信息
Ifs:此配置支持的USB接口數(shù)量,每個(gè)配置有一個(gè)或多個(gè)接口組成,每個(gè)接口具有獨(dú)特的功能,并且綁定到不同的USB設(shè)備驅(qū)動(dòng)。一個(gè)常見(jiàn)的例子是一個(gè)USB播放器,它帶有一個(gè)播放的音頻接口和一個(gè)用于音量控制的HID接口。EHCI、HUB,HUB下的U盤和USB網(wǎng)卡的Ifs都是1,說(shuō)明它們支持1個(gè)USB接口。HUB下的USB攝像頭的Ifs是2,說(shuō)明它支持2個(gè)USB接口。
Cfg:此配置配置數(shù)量,這里我們的都是01。
Atr:屬性,供電配置,位詳細(xì)定義如下:
????????????????????????? D7????????????? 保留,必須置1
????????????????????????? D6????????????? 自供電模式
????????????????????????? D5????????????? 遠(yuǎn)程喚醒
????????????????????????? D4~D0????? 保留
MPwr:最大功耗,以2mA為單位,例如0x32為50*2=100mA。 USB設(shè)備供電有兩種方式,self-powered和bus-powered兩種方式,驅(qū)動(dòng)代碼會(huì)判斷設(shè)備標(biāo)志寄存器是否過(guò)流的。最大500mA。
?
7.I接口描述符信息
If:該接口編號(hào),接口編號(hào)從0開(kāi)始分配,當(dāng)一個(gè)配置有多個(gè)接口時(shí),就用該字段來(lái)區(qū)分不同的接口。我們這里的If都為0
Alt:USB設(shè)備配置與USB配置描述符是一一對(duì)應(yīng)的, 即一個(gè)配置只能有一個(gè)配置描述符。雖然由bInterfaceNumber字段可知, 每一個(gè)接口都有一個(gè)惟一確定的接口編號(hào), 但是一個(gè)接口卻可以由不只一個(gè)接口描述符來(lái)描述它。USB 允許多個(gè)接口描述符來(lái)描述同一個(gè)接口, 且這些描述符都可通過(guò)命令切換。此字段就是每一個(gè)這類描述符惟一的編號(hào)。USB可通過(guò)調(diào)用這個(gè)字段來(lái)切換描述同一個(gè)接口的不同描述符。控制傳輸中的Get_Inter face 命令可以用來(lái)得到目前正在使用的描述一個(gè)確定接口的接口描述符的編號(hào), 即此字段。而Set_Inte rface 命令則以此字段值為參數(shù), 用來(lái)使相應(yīng)的接口描述符描述某個(gè)確定的接口。我們這里的Alt都為0。
Eps:端點(diǎn)數(shù)量,不包括端點(diǎn)0。USB網(wǎng)卡AX88772C這里的Alt=3(不包括Endpoint0)
AX88772C關(guān)于端點(diǎn)的說(shuō)明
Cls:接口類碼,比如HUB的為09h,USB-IF分配的類代碼,0預(yù)覽未來(lái)使用,0xFF表示接口類是廠家自定義,其他值由USB-IF指定。
Sub:接口子類碼。USB-IF分配的子類代碼,由Cls限制
Prot:接口的協(xié)議,如果一個(gè)接口支持特定類請(qǐng)求,此代碼標(biāo)識(shí)由特定設(shè)備類定義的協(xié)議,如果該字段為0,設(shè)備部在此接口不使特定類的協(xié)議,如果該字段為0xFF,設(shè)備為此接口使用廠家自定義協(xié)議。
Driver:驅(qū)動(dòng)名字
?
8.E端點(diǎn)描述符信息。
Ad:端點(diǎn)地址(I=In,O=out)
Atr:端點(diǎn)屬性。
MxPS:端點(diǎn)所支持最大數(shù)據(jù)包的長(zhǎng)度。
Ivl:端點(diǎn)數(shù)據(jù)傳輸?shù)脑L問(wèn)時(shí)間間隔。對(duì)于全速/低速的中斷端點(diǎn),取值范圍為 1~255,對(duì)于高速中斷端點(diǎn),取值范圍為1~16,詳細(xì)定義可以參考USB協(xié)議。比如HUB的Ivl=256ms。
?
參考鏈接:
/sys/kernel/debug/usb/devices解析
https://www.cnblogs.com/hellokitty2/p/9418895.html
?
Linux下,查看USB設(shè)備信息
https://blog.csdn.net/zouli415/article/details/79886084
?
linux下的ehci控制器調(diào)試
https://blog.csdn.net/xiaojsj111/article/details/41864597
?
lsusb、usbfs查看usb拓?fù)浣Y(jié)構(gòu)
https://blog.csdn.net/shichaog/article/details/42269483
?
總結(jié)
以上是生活随笔為你收集整理的Android通过cat /sys/kernel/debug/usb/devices获取USB信息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: USB2.0 设备类代码表
- 下一篇: USB学习5---android usb