我有一台运行 Linux 3.4 的嵌入式计算机,不幸的是,我目前无法升级到 4.xy。
我g_ether
使用以下配置选项编译为内核模块:
CONFIG_USB_ETH=m
CONFIG_USB_ETH_RNDIS=y
该模块编译良好,我可以在系统启动后加载它而没有问题:
[ 7.160000] DWC_otg: dwc_udc_start: g_ether
[ 7.168000] DWC_otg: bind to driver g_ether
[ 7.176000] DWC_otg: dwc_otg_pcd_alloc_request(e30171a4,208)
[ 7.184000] g_ether gadget: using random self ethernet address
[ 7.196000] usb0: MAC 52:e9:07:c2:0f:23
[ 7.204000] usb0: HOST MAC 82:cf:ce:fa:44:18
[ 7.212000] rndis_bind
[ 7.224000] DWC_otg: dwc_otg_pcd_alloc_request(e30171ec,208)
[ 7.232000] rndis_register: configNr = 0
[ 7.236000] rndis_set_param_medium: 0 0
[ 7.244000] DWC_otg: dwc_otg_pcd_alloc_request(e30171ec,208)
[ 7.252000] g_ether gadget: Ethernet Gadget, version: Memorial Day 2008
[ 7.264000] g_ether gadget: g_ether ready
[ 7.268000] DWC_otg: dwc_udc_start: registered gadget driver 'g_ether'
我的目标是将这台嵌入式计算机连接到 Windows 计算机。当我连接嵌入式计算机时,Windows 最初在设备管理器中显示“设备”正常工作,然后更新以显示它无法正常工作并出现错误:
This device cannot start. (Code 10)
FWIW 我在 Windows 端尝试了几种不同的驱动程序,包括linux.inf
Linux USG Gadget 文档中引用的驱动程序、一些内置驱动程序以及我在论坛上找到的一个驱动程序。
在 Linux 端,当我插入 USB 线时,我看到以下输出:
Aug 29 05:13:54 dot-8f2wktlxah kernel: [ 31.840000] g_ether gadget: init rndis
Aug 29 05:13:54 dot-8f2wktlxah kernel: [ 31.840000] g_ether gadget: RNDIS RX/TX early activation ...
Aug 29 05:13:54 dot-8f2wktlxah kernel: [ 32.116000] usb0: qlen 10
Aug 29 05:13:56 dot-8f2wktlxah kernel: [ 34.128000] g_ether gadget: rndis req21.00 v0000 i0000 l24
Aug 29 05:13:56 dot-8f2wktlxah kernel: [ 34.540000] g_ether gadget: rndis reqa1.01 v0000 i0000 l4096
这对应于 Windows 端(通过 USBPcap):
1226 29734.081932 host 2.1.0 USBCOM 36 SEND ENCAPSULATED COMMAND Request
1227 29735.362932 2.1.0 host USBCOM 52 SEND ENCAPSULATED COMMAND Response
1228 29735.362932 2.1.0 host USB 28 GET STATUS Status
1229 29735.810932 2.1.2 host USBCOM 35 NETWORK CONNECTION
1230 29735.810932 host 2.1.0 USBCOM 36 GET ENCAPSULATED RESPONSE Request
Linux 端的rndis req21
对应于Windows 端的 ,和SEND ENCAPSULATED COMMAND
也是如此。rndis reqa1
GET ENCAPSULATED RESPONSE
在最后的响应/请求之后,没有其他输出。
我知道 Linux 3.4 已经过时了,但我没有升级选项,因为这是一台嵌入式计算机,因此我很感激芯片制造商提供更新。
有没有人在 Windows 7/8 和 Linux 3.4 上成功使用过g_ether
内核模块,或者知道为什么这些请求/响应似乎在最后一个之后就停止了GET ENCAPSULATED RESPONSE
?