我有一台运行Linux 3.4的嵌入式计算机,但不幸的是,目前还没有办法升级到4.x.y.
我使用以下配置选项将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 USG Gadget文档中引用的linux.inf
,几个内置驱动程序,以及我在论坛上找到的一个驱动程序。
从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已经过时了,但我没有升级选项,因为这是一台嵌入式计算机,因此我很感谢芯片制造商提供更新。
有没有人成功地将g_ether
内核模块用于Windows 7/8和Linux 3.4,或者知道为什么这些请求/响应似乎在最后GET ENCAPSULATED RESPONSE
之后停止了?