USB和sysfs檔案系統

2021-06-19 19:24:49 字數 2942 閱讀 2914

2023年08月31日 星期五 19:32

由於單個usb物理裝置的複雜性,裝置在sysfs中的表示也非常複雜。無論是物理usb裝置(用struct usb_device表示)還是單獨的usb介面(用struct usb_inte***ce表示),在sysfs中均表示為單獨的裝置(這是因為這2個結構都包含乙個struct device結構)。 例如, 對於乙個簡單的只包含乙個usb介面的usb滑鼠, 下面的內容給這個裝置的sysfs目錄樹:

hostcontroller

usb_device

/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1

|-- 2-1:1.0

usb_inte***ce

roothub

| |-- balternatesetting 

介面描述符資訊

| |-- binte***ceclass

| |-- binte***cenumber

| |-- binte***ceprotocol

| |-- binte***cesubclass

| |-- bnumendpoints

||-- bconfigurationvalue

裝置配置資訊

|-- bnuminte***ces

|-- bmaxpower

|-- bmattributes

|-- bdeviceclass

裝置描述資訊

|-- bdevicesubclass

|-- bdeviceprotocol

|--bmaxpacketsize0

|-- idvendor

|-- idproduct

|-- bcddevice

|--bnumconfigurations

|-- devnum

裝置資訊

|-- maxchild

|-- product

|-- serial

|-- speed

|-- manufacturer

結構usb_device在樹中被表示在:

/sys/devices/pci0000:00/0000:00:09.0/usb2/2-1

而滑鼠的usb介面(usb滑鼠驅動程式所繫結的介面)位於如下目錄:

/sys/devices/pci0000:00/0000:00:09.0/usb2/2-1/2-1:1.0

我們將描述核心如何分類usb裝置,以幫助理解上面這些長長的裝置路徑名的含義。

第乙個usb裝置是乙個根集線器(root hub)。 這是乙個usb控制器(控制器器和根hub整合在一起),通常包含在乙個pci裝置中。之所以這樣命名該控制器,是因為它控制著連線到其上的整個usb匯流排。該控制器是連線pci匯流排和usb匯流排的橋,也是該匯流排上的第乙個usb裝置。

所有的根集線器都由usb核心分配了唯一的編號。在我們的例子中,根集線器稱為usb2,因為它是註冊到usb核心的第2個根集線器。單個系統中可以包含的根集線器的編號在任何時候都是沒有限制的。

usb裝置

usb_device的名字: 根hub的編號+-+裝置所在的埠號 。 例如:2-1

usb匯流排上的每個裝置都以根集線器的編號作為其名字中的第乙個號碼。該號碼隨後是乙個橫扛字元(-)和裝置所插入的埠號。因為我們例子中裝置插入到第乙個埠,1被新增到了名字中。因此,usb滑鼠的名字是2-1。因為該usb裝置包含乙個介面,導致了樹中的另乙個裝置被新增到sysfs路徑中。

usb介面usb_inte***ce的命名: usb裝置的名字+:+usb配置編號+.+介面編號。 例如:

2-1:1.0

usb介面的命名方案是裝置名直到介面為止:在我們的例子中,是2-1後面加乙個冒號和usb配置的編號,然後是乙個句點和介面的編號。因此對於本例而言,裝置名是2-1:1.0,因為它是第乙個配置,具有介面編號0。

概言之,usb sysfs裝置命名方案為:

root_hub-hub_port:config.inte***ce

隨著裝置更深地進入usb樹,和越來越多的usb集線器的使用,集線器的埠號被新增到跟隨著鏈中前乙個集線器埠號的字串中。對於乙個兩層的樹,其裝置名類似於:

root_hub-hub_port-hub_port:config.inte***ce

從前面的usb裝置和介面的目錄列表可以看到,所有的usb特定資訊都可以從sysfs直接獲得(例如,idvendor、 idproduct和bmaxpower資訊)。這些檔案中的乙個,即bconfigurationvalue,可以被寫入以改變當前使用的活動usb配置。當核心不能夠確定選擇哪乙個配置以恰當地操作裝置時,這對於具有多個配置的裝置很有用。許多usb數據機需要向該檔案中寫入適當的配置值,以便把適當的usb驅動程式繫結到該裝置。

sysfs並沒有展示usb裝置所有的不同部分,它只限於介面級別。裝置可能包含的任何可選配置都沒有顯示,還有和介面相關的端點的細節。這些資訊可以從usbfs檔案系統找到,該檔案系統被掛載到系統的/proc/bus/usb/目錄。/proc/bus/usb/devices檔案確實顯示了和sysfs所展示的所有資訊相同的資訊,還有系統中存在的所有usb裝置的可選配置和端點資訊。usbfs還允許使用者空間的程式直接訪問usb裝置,這使得許多核心驅動程式可以遷移到使用者空間,從而更容易維護和除錯。usb掃瞄器是乙個很好的例子,它不再存在於核心中,因為它的功能現在包含在了使用者空間的sane庫程式中。

USB和sysfs檔案系統

由於單個usb物理裝置的複雜性,裝置在sysfs中的表示也非常複雜。無論是物理usb裝置 用struct usb device 表示 還是單獨的usb介面 用struct usb inte ce 表示 在sysfs中均表示為單獨的裝置 這是因為這2個結構都包含乙個struct device結構 例如...

USB和sysfs檔案系統

2007年08月31日 星期五 19 32 由於單個usb物理裝置的複雜性,裝置在sysfs中的表示也非常複雜。無論是物理usb裝置 用struct usb device表示 還是單獨的usb介面 用struct usb inte ce表示 在sysfs中均表示為單獨的裝置 這是因為這2個結構都包含...

sysfs檔案系統

sysfs是用來向使用者空間匯出核心物件的一種檔案系統,通過它,使用者空間程式可以檢視 甚至修改核心資料結構。該檔案系統是基於核心資料結構kobject建立起來的,同時該檔案系統的目錄結構反映了相關核心資料結構的層次結構。由於kobject是組成裝置模型的基本結構,因此sysfs也包括了系統中裝置的...