我試圖將Pololu的迷你大師USB伺服控制器驅動程序移植到Linux內核模塊中(這是我第一次編寫kenel模塊)。 Pololu的Linux驅動程序實際上使用單聲道運行時環境,我認爲很多是兼容層,它是用C#編寫的(因爲我是未知的),所以將它移植到C將它編譯爲內核模塊非常重要,因爲我希望其他程序使用管道與USB模塊進行通信。{USB複合設備內核模塊驅動程序編程}多接口管理和「無端點」處理
所以,這裏的交易,我用的lsusb -vvv列出Device Characteristics
但最後界面態:
Interface Descriptor:
bInterfaceNumber 4
bNumEndpoints 0
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 4
bInterfaceProtocol 1
iInterface 2 Pololu Mini Maestro 18-Channel USB Servo Controller
我想不通的是:
- 是否有可用於配置設備模式的未列出控制端點?
- 我可以處理它嗎?我該怎麼做?
從複合設備本身:
- 內核驅動程序實例運行爲每個接口?
- 如何捕捉界面並確定如何管理界面?
- 我該如何處理界面關聯?
最好的問候!
我如何才能看到它的界面我會處理的驅動程序? (從駕駛員角度)。據我所知,VendorID(VID)和ProductID(PID)由5個接口或VID/PID共享它對每個接口都是唯一的嗎? –
是的,VID/PID將作爲一個整體(複合設備)存在於物理設備中,但每個接口將代表一種邏輯設備。從原始的角度來看,您可以向USB設備詢問其配置描述符以獲取總數接口。然後你可以遍歷並詢問每個接口描述符並檢查它。如果您正在爲某些特定設備創建驅動程序,例如'usbserial',則您爲設備註冊的回調將傳遞給您一些結構。從那裏你可以找到那些來確定你正在與之交談的界面的數量。 – Preston
你也可以查看libusb,從那裏你可以訪問你的設備,而不需要內核驅動程序部分。取決於你想做什麼,這可能足以讓你前進。 – Preston