USB 接口是自己被捆綁到配置的. 一個 USB 設備可有多個配置並且可能在它們之間轉換 以便改變設備的狀態. 例如, 一些允許固件被下載到它們的設備包含多個配置來實現這個. 一個配置只能在一個時間點上被使能. Linux 處理多配置 USB 設備不是太好, 但是, 幸 運的是, 它們很少.
linux 描述 USB 配置使用結構 struct usb_host_config 和整個 USB 設備使用結構 struct usb_device. USB 設備驅動通常不會需要讀寫這些結構的任何值, 因此它們在這 里沒有詳細定義. 好奇的讀者可在內核源碼樹的文件 include/linux/usb.h 中找到對它 們的描述.
一個 USB 設備驅動通常不得不轉換數據從給定的 struct usb_interface 結構到 struct usb_device 結構, USB 核心需要給很多的函數調用. 為此, 提供有函數 interface_to_usbdev. 在以后, 希望所有的當前需要一個 struct usb_device 的 USB 調用, 將被轉換為采用一個 struct usb_interface 參數, 並且不會要求驅動做這個轉換.
所以總結, USB 設備是非常復雜的, 並且由許多不同邏輯單元組成. 這些單元之間的關系 可簡單地描述如下:
設備通常有一個或多個配置.
- 配置常常有一個或多個接口
- 接口常常有一個或多個設置.
- 接口有零或多個端點.