usb裝置在sys子系統中的表示

2021-06-20 14:57:07 字數 4397 閱讀 6896

首先,看一下/sys/bus/usb/devices/usb3下的目錄結構 

說明:usb匯流排上每個裝置都以root hub的編號作為其名字的第乙個號碼,這個號碼後跟著乙個「-」字元還有裝置所插入的埠號(port)。

(3-0:1.0中3為root hub的編號,3-0表示裝置所接入的root hub編號為3,插入到3號root hub的0埠。 「:」後跟usb配置(configuration)的編號,然後是乙個「.」和該介面的編號,3-0:1.0表示使用第乙個配置,介面編號為0)。

介面:usb端點(endpoint)被**為介面(inte***ce),乙個介面代表乙個基本功能。有的裝置具有多個介面,像usb揚聲器由音訊介面和鍵盤介面。

(host/roothub)-port : configuration.(inte***ce/endpoint)

(這只是在根hub沒有下級hub的情況下才成立,更詳細的分析見struct usb_device部分)

配置:乙個裝置可以有一種或幾種配置,比如手機都會有多種配置如中文、英文等。

sysfs並沒有顯示usb裝置的所有部分,裝置可能包含的可選配置都沒有顯示。不過可以通過usbfs找到,該檔案系統被掛載到/proc/bus/usb下:

# cat devices

t:  bus=04 lev=00 prnt=00 port=00 cnt=00 dev#=  1 spd=12  mxch= 1

b:  alloc=  0/900 us ( 0%), #int=  0, #iso=  0

d:  ver= 1.10 cls=09(hub  ) sub=00 prot=00 mxps=64 #cfgs=  1

p:  vendor=0000 prodid=0000 rev= 2.06

s:  manufacturer=linux 2.6.23.17_stm23_0119-mb680 ohci_hcd

s:  product=stm-ohci

s:  serialnumber=st-usb.1

c:* #ifs= 1 cfg#= 1 atr=e0 mxpwr=  0ma

i:* if#= 0 alt= 0 #eps= 1 cls=09(hub  ) sub=00 prot=00 driver=hub

e:  ad=81(i) atr=03(int.) mxps=   2 ivl=255ms

t:  bus=03 lev=00 prnt=00 port=00 cnt=00 dev#=  1 spd=480 mxch= 1

b:  alloc=  0/800 us ( 0%), #int=  1, #iso=  0

d:  ver= 2.00 cls=09(hub  ) sub=00 prot=01 mxps=64 #cfgs=  1

p:  vendor=0000 prodid=0000 rev= 2.06

s:  manufacturer=linux 2.6.23.17_stm23_0119-mb680 ehci_hcd  //usb3,port00: ehci

s:  product=st-ehci

s:  serialnumber=st-usb.1

c:* #ifs= 1 cfg#= 1 atr=e0 mxpwr=  0ma

i:* if#= 0 alt= 0 #eps= 1 cls=09(hub  ) sub=00 prot=00 driver=hub

e:  ad=81(i) atr=03(int.) mxps=   4 ivl=256ms

t:  bus=03 lev=01 prnt=01 port=00 cnt=01 dev#=  2 spd=480 mxch= 4

d:  ver= 2.00 cls=09(hub  ) sub=00 prot=02 mxps=64 #cfgs=  1

p:  vendor=0424 prodid=2514 rev= b.b3

c:* #ifs= 1 cfg#= 1 atr=e0 mxpwr=  2ma

i:  if#= 0 alt= 0 #eps= 1 cls=09(hub  ) sub=00 prot=01 driver=hub

e:  ad=81(i) atr=03(int.) mxps=   1 ivl=256ms

i:* if#= 0 alt= 1 #eps= 1 cls=09(hub  ) sub=00 prot=02 driver=hub

e:  ad=81(i) atr=03(int.) mxps=   1 ivl=256ms

t:  bus=02 lev=00 prnt=00 port=00 cnt=00 dev#=  1 spd=12  mxch= 1

b:  alloc=  0/900 us ( 0%), #int=  0, #iso=  0

d:  ver= 1.10 cls=09(hub  ) sub=00 prot=00 mxps=64 #cfgs=  1

p:  vendor=0000 prodid=0000 rev= 2.06

s:  manufacturer=linux 2.6.23.17_stm23_0119-mb680 ohci_hcd  //usb2:ohci

s:  product=stm-ohci

s:  serialnumber=st-usb.0

c:* #ifs= 1 cfg#= 1 atr=e0 mxpwr=  0ma

i:* if#= 0 alt= 0 #eps= 1 cls=09(hub  ) sub=00 prot=00 driver=hub

e:  ad=81(i) atr=03(int.) mxps=   2 ivl=255ms

t:  bus=01 lev=00 prnt=00 port=00 cnt=00 dev#=  1 spd=480 mxch= 1

b:  alloc=  0/800 us ( 0%), #int=  0, #iso=  0

d:  ver= 2.00 cls=09(hub  ) sub=00 prot=01 mxps=64 #cfgs=  1

p:  vendor=0000 prodid=0000 rev= 2.06

s:  manufacturer=linux 2.6.23.17_stm23_0119-mb680 ehci_hcd  //usb1:ehci

s:  product=st-ehci

s:  serialnumber=st-usb.0

c:* #ifs= 1 cfg#= 1 atr=e0 mxpwr=  0ma

i:* if#= 0 alt= 0 #eps= 1 cls=09(hub  ) sub=00 prot=00 driver=hub

e:  ad=81(i) atr=03(int.) mxps=   4 ivl=256ms

#

裝置樹下的input子系統

input 就是輸入的意思,因此 input 子系統就是管理輸入的子系統,和 pinctrl 和 gpio 子系統一樣,都是 linux 核心針對某一類裝置而建立的框架。比如按鍵輸入 鍵盤 滑鼠 觸控螢幕等等這些都屬於輸入裝置,不同的輸入裝置所代表的含義不同,按鍵和鍵盤就是代表按鍵資訊,滑鼠和觸控螢...

在 Linux 中永久修改 USB 裝置許可權

問題 當我嘗試在 linux 中執行 usb gps 接收器時我遇到了下面來自 gpsd 的錯誤。看上去 gpsd 沒有許可權訪問 usb 裝置 dev ttyusb0 我該如何永久修改它在linux上的許可權?1.gpsd 377 gpsd error read only device open ...

Linux裝置驅動子系統的構建過程

前面即便文章講述了基本的資料結構和操作函式,這篇文章將從系統啟動開始簡述整個驅動子系統的構建過程。從系統加電開始,首先是一系列初始化過程,這些過程一般由組合語言 完成,在成功初始化一些必要的裝置之後,程式會執行第乙個c函式start kernel。為了找個驅動子系統的構建過程,需要沿著start k...