|
|
本帖最后由 seekyou2008 于 2025-11-4 23:16 编辑
在进行下面操作之前,我们首先要确认自己的执行环境是否满足:PVE + OPENWRT + MediaTek Inc. MT7612U USB无线网卡。
PVE中执行:
root@mywows:~# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 05e3:0751 Genesys Logic, Inc. microSD Card Reader
Bus 001 Device 013: ID 0e8d:2870 MediaTek Inc. Љ
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
查看有没有列出USB无线网卡设备,当前只有一个
Bus 001 Device 013: ID 0e8d:2870 MediaTek Inc. Љ 它不是我们要的USB无线网卡,它可能是一个存储设备。
继续dmesg,发现了一些蛛丝马迹:
[ 367.766094] usb-storage 1-3:1.0: USB Mass Storage device detected
[ 367.766658] scsi host3: usb-storage 1-3:1.0
[ 368.776490] scsi 3:0:0:0: CD-ROM MediaTek Flash autorun 0.01 PQ: 0 ANSI: 0 CCS
你发现什么了吗?
系统识别成了“虚拟光驱”,里面可能有 Windows 驱动安装程序,这就是 ZeroCD 机制。
这样导致的后果:
无法触发无线驱动加载 (mt76x2u 等)
永远不会出现 wlan0 接口
找到问题的根源,接下来就好解决了。
解决步骤(PVE 环境)
1,安装 usb_modeswitch:
apt update
apt install usb-modeswitch usb-modeswitch-data
2,自动化切换(推荐)
为了避免每次拔插都要手动运行 usb_modeswitch,可以在 PVE 宿主机加个 udev 规则:root@mywows:~# cat /etc/udev/rules.d/99-mt7612u-switch.rules
ACTION=="add",ATTRS{idVendor}=="0e8d", ATTRS{idProduct}=="2870", RUN+="/usr/sbin/usb_modeswitch -KW -v 0e8d -p 2870"
这样以后插上 ZeroCD 模式的网卡会自动切换成无线模式。
验证结果是不是与我们预期的效果一致:
root@mywows:~# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 05e3:0751 Genesys Logic, Inc. microSD Card Reader
Bus 001 Device 015: ID 0e8d:7612 MediaTek Inc. MT7612U 802.11a/b/g/n/ac Wireless Adapter
OK,完美!我们期待已久的USB无线网卡千呼万唤始出来了。
接下来开始直通操作(PVE):
qm set VMID -usb0 host=0e8d:7612
qm set VMID -machine q35 VMID要换成你自己实际的VM ID。
在OPENWRT上执行:
root@OpenWrt:~# lsusb
Bus 001 Device 001: ID 1d6b:0001 Linux 6.6.93 uhci_hcd UHCI Host Controller
Bus 002 Device 001: ID 1d6b:0001 Linux 6.6.93 uhci_hcd UHCI Host Controller
Bus 003 Device 001: ID 1d6b:0001 Linux 6.6.93 uhci_hcd UHCI Host Controller
Bus 004 Device 001: ID 1d6b:0002 Linux 6.6.93 ehci_hcd EHCI Host Controller
Bus 005 Device 001: ID 1d6b:0002 Linux 6.6.93 ehci_hcd EHCI Host Controller
Bus 005 Device 002: ID 0627:0001 QEMU QEMU USB Tablet
Bus 006 Device 001: ID 1d6b:0001 Linux 6.6.93 uhci_hcd UHCI Host Controller
Bus 007 Device 001: ID 1d6b:0001 Linux 6.6.93 uhci_hcd UHCI Host Controller
Bus 008 Device 001: ID 1d6b:0001 Linux 6.6.93 uhci_hcd UHCI Host Controller
Bus 009 Device 001: ID 1d6b:0002 Linux 6.6.93 xhci-hcd xHCI Host Controller
Bus 010 Device 001: ID 1d6b:0003 Linux 6.6.93 xhci-hcd xHCI Host Controller
Bus 010 Device 002: ID 0e8d:7612 MediaTek Inc. 802.11ac WLAN root@OpenWrt:~# dmesg | grep mt76
[ 8.643915] usbcore: registered new interface driver mt7601u
[ 8.998262] mt76x2u 10-1:1.0: ASIC revision: 76120044
[ 9.050305] mt76x2u 10-1:1.0: ROM patch build: 20141115060606a
[ 9.237596] mt76x2u 10-1:1.0: Firmware Version: 0.0.00
[ 9.238436] mt76x2u 10-1:1.0: Build: 1
[ 9.239050] mt76x2u 10-1:1.0: Build Time: 201507311614____
[ 10.264698] usbcore: registered new interface driver mt76x2u
[ 14.004184] mt76x2u 10-1:1.0 phy0-ap0: entered allmulticast mode
[ 14.005018] mt76x2u 10-1:1.0 phy0-ap0: entered promiscuous mode root@OpenWrt:~# iw dev
phy#0
Interface phy0-ap0
ifindex 4
wdev 0x1
addr xx:xx:xx:xx:xx:xx
ssid OpenWrt
type AP
channel 36 (5180 MHz), width: 80 MHz, center1: 5210 MHz
txpower 19.00 dBm
multicast TXQ:
qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
0 0 10594 0 0 0 0 1443375 11848
至此直通USB无线网卡结束。
后记:
usb_modeswitch到底是干什么的?
许多 USB 网络设备在插入时并不会直接以“网卡”身份出现,而是先伪装成一个 USB 存储设备(U盘),用于在 Windows 上自动安装驱动。这种行为叫做 ZeroCD 模式。
在Linux下,这种设备会被识别为usb-storage,
而不是usb-serial 或 net 类型设备。
于是你插上网卡,系统却以为你插了个 U 盘。
usb_modeswitch 的作用就是:
向设备发送特定命令,让它从“存储模式”切换到“真实的网络设备模式”。 工作流程如下:
[USB 插入] → [ZeroCD 模式] → usb_modeswitch → [重新枚举] → [驱动加载] → [wlan 接口创建]
注意:如果上面iw dev命令无输出时,你可能需要登录OPENWRT WEB界面,在NETWORK,WIRELESS里把 相关 接口从DISABLE启用为ENABLE。这一步非常 关键,很多时候你可能就卡在这里。
好了,最后留个尾巴,关于USB无线网卡直通后插拨导致的另外一个问题,这个坑留着下次填。
|
|