Linux-Kernel
無法設置 USB 小工具設備類和協議
在將設備配置為 RNDIS 小工具時,我無法成功設置 bDeviceClass、bDeviceProtocol 或 bDeviceSubClass
/sys/kernel/config/usb_gadget/g1
。我正在使用以下值配置小工具,並且可以在 Linux 中成功讀取它們:
echo 0xef > bDeviceClass echo 0x02 > bDeviceSubClass echo 0x01 > bDeviceProtocol
但是當我將設備插入我的 Windows 機器並觀察 USB 設備描述符時,我得到以下資訊:
bDeviceClass: 0x02 bDeviceSubClass: 0x00 bDeviceProtocol: 0x00
在執行 4.9 核心的不同設備上,同樣的過程可以正常工作,並且 Windows 從設備中讀取正確的值。我目前的設備正在執行 4.14.53。我不確定為什麼以前的方法不再有效。
我不確定它是否相關,但為了在我目前的設備上傳遞產品、製造商和序列號資訊,我必須在 modprobing g_ether 時將這些值作為參數傳遞,而不是在
strings/0x409
. 我試過用 bDeviceClass、bDeviceSubclass 和 bDeviceProtocol 做同樣的事情,但沒有任何運氣。有誰知道我做錯了什麼?
解決方案是 modprobe
libcomposite
模組而不是g_ether
直接。這使得 USB 設備描述符可以按預期設置。這還需要腳本在退出之前將小工具綁定到 UDC。