0

我有一台运行 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.infLinux 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 reqa1GET ENCAPSULATED RESPONSE

在最后的响应/请求之后,没有其他输出。

我知道 Linux 3.4 已经过时了,但我没有升级选项,因为这是一台嵌入式计算机,因此我很感激芯片制造商提供更新。

有没有人在 Windows 7/8 和 Linux 3.4 上成功使用过g_ether内核模块,或者知道为什么这些请求/响应似乎在最后一个之后就停止了GET ENCAPSULATED RESPONSE

4

0 回答 0