Linux-Kernel

無法設置 USB 小工具設備類和協議

  • March 10, 2021

在將設備配置為 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 做同樣的事情,但沒有任何運氣。

有誰知道我做錯了什麼?

解決方案是 modprobelibcomposite模組而不是g_ether直接。這使得 USB 設備描述符可以按預期設置。

這還需要腳本在退出之前將小工具綁定到 UDC。

引用自:https://unix.stackexchange.com/questions/631138