W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
由于單個 USB 物理設備的復雜性, 設備在 sysfs 中的表示也非常復雜. 物理 USB 設備(通過 struct usb_device 表示)和單個 USB 接口(由 struct usb_interface 表示)都作為單個設備出現(xiàn)在 sysfs . (這是因為這 2 個結構都包含一個 struct device結構). 例如, 對于一個簡單的只包含一個 USB 接口的 USB 鼠標, 下面的內(nèi)容給這個設備的 sysfs 目錄樹:
/sys/devices/pci0000:00/0000:00:09.0/usb2/2-1
|-- 2-1:1.0
| |-- bAlternateSetting
| |-- bInterfaceClass
| |-- bInterfaceNumber
| |-- bInterfaceProtocol
| |-- bInterfaceSubClass
| |-- bNumEndpoints
| |-- detach_state
| |-- iInterface
| `-- power
| `-- state
|-- bConfigurationValue
|-- bDeviceClass
|-- bDeviceProtocol
|-- bDeviceSubClass
|-- bMaxPower
|-- bNumConfigurations
|-- bNumInterfaces
|-- bcdDevice
|-- bmAttributes
|-- detach_state
|-- devnum
|-- idProduct
|-- idVendor
|-- maxchild
|-- power
| `-- state
|-- speed
`-- version
結構 usb_device 在樹中被表示在:
/sys/devices/pci0000:00/0000:00:09.0/usb2/2-1
而鼠標的 USB 接口 - USB 鼠標設備驅(qū)動被綁定到的接口 - 位于目錄:
/sys/devices/pci0000:00/0000:00:09.0/usb2/2-1/2-1:1.0
為幫助理解這個長設備路徑的含義, 我們描述內(nèi)核如何標識 USB 設備.
第一個 USB 設備是一個根集線器. 這是 USB 控制器, 常常包含在一個 PCI 設備中. 控制器的命名是由于它控制整個連接到它上面的 USB 總線. 控制器是一個 PCI 總線和 USB 總線之間的橋, 同時是總線上的第一個設備.
所有的根集線器被 USB 核心安排了一個唯一的號. 在我們的例子里, 根集線器稱為 usb2, 因為它是注冊到 USB 核心的第 2 個根集線器. 可包含在單個系統(tǒng)中在任何時間的根集線器的數(shù)目沒有限制.
每個在 USB 總線上的設備采用根集線器的號作為它的名子的第一個數(shù)字. 緊跟著的是 - 字符和設備插入的端口號. 由于我們例子中的設備插在第一個端口, 一個 1 被添加到名子. 因此給主 USB 鼠標設備的名子是2-1. 因為這個 USB 設備包含一個接口, 那使得樹中的另一個設備被添加到 sysfs 路徑. 到此點, USB 接口的命名方法是設備名:在我們的例子, 是 2-1 接著一個分號和 USB 配置名, 接著一個句點和接口名. 因此對這個例子, 設備名是 2-1:1.0 因為它是第一個配置并且有接口號 0.
總結, USB sysfs 設備命名方法是:
root_hub-hub_port:config.interface
隨著設備在 USB 樹中進一步向下, 并且越來越多的 USB 集線器, 集線器端口號被添加到字符串中緊隨著鏈中之前的集線器端口號. 對一個 2 層的樹, 設備名看來象:
root_hub-hub_port-hub_port:config.interface
如同可在之前的 USB 設備和接口目錄列表中見到的, 所有的 USB 特定信息可直接從 sysfs 獲得(例如, idVendor, idProduct, 和 bMaxPower 信息). 一個文件, bConfigrationValue, 可被寫入來改變激活的正被使用的 USB 配置. 這對有多個配置的設備是有用的, 當內(nèi)核不能決定選擇什么配置來正確操作設備. 許多 USB 貓需要有正確的配置值被寫到這個文件來使正確的 USB 驅(qū)動綁定到設備.
sysfs 沒暴露一個 USB 設備的所有的不同部分,因為它停止在接口水平. 任何這個設備可能包含的預備配置都沒有展示, 連同關聯(lián)到接口的端點的細節(jié). 這個信息可在 usbfs 文件系統(tǒng)中找到, 它加載在系統(tǒng)的 /proc/bus/usb/ 目錄. 文件 /proc/bus/usb/devices 展示了所有的在 sysfs 中暴露的信息, 連同所有的出現(xiàn)在系統(tǒng)中的 USB 設備的預備配置和端點信息. usbfs 也允許用戶空間程序直接對話 USB 設備, 這已使能了許多內(nèi)核驅(qū)動被移出到用戶空間, 這里容易維護和調(diào)試. USB 掃描器驅(qū)動是這個的一個好例子, 由于它不再在內(nèi)核中出現(xiàn), 它的功能現(xiàn)在包含在用戶空間的 SANE 庫程序中.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: