You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

QEMU下为搭载EHCI控制器的Windows XP虚拟机直通全速USB设备的可行方案咨询

QEMU下为搭载EHCI控制器的Windows XP虚拟机直通全速USB设备的可行方案咨询

我之前折腾过Windows XP在QEMU下的USB直通问题,正好碰到过和你一样的速度不匹配情况,给你几个可行的解决思路:

方案一:添加USB 1.1控制器(UHCI/OHCI)分流全速设备

EHCI是USB2.0高速控制器,本身只负责高速设备,全速/低速设备需要搭配USB1.1的UHCI或OHCI控制器来支持。Windows XP原生支持这两种控制器,所以我们可以在VM里同时启用EHCI和USB1.1控制器,把全速设备挂到USB1.1总线上,就能消除速度不匹配警告。

操作步骤:

  1. 在你的QEMU命令中添加一个USB 1.1控制器(这里推荐UHCI,兼容性更好):
    -device usb-uhci,id=usb1_bus
    
  2. 修改你的USB直通设备参数,指定它们连接到这个新的USB1.1总线:
    把原来的:
    -device usb-host,vendorid=0x1e7d,productid=0xafca
    -device usb-host,vendorid=0x046d,productid=0xc53d
    
    改成:
    -device usb-host,vendorid=0x1e7d,productid=0xafca,bus=usb1_bus.0
    -device usb-host,vendorid=0x046d,productid=0xc53d,bus=usb1_bus.0
    
  3. 保留原来的-device usb-ehci,这样VM里同时拥有USB2.0和USB1.1控制器,XP会自动识别并加载驱动。

修改后的完整QEMU命令示例:

qemu-system-x86_64 \
-nodefaults \
-machine pc-i440fx-5.2,accel=kvm,usb=off,vmport=off,dump-guest-core=off \
-name "Windows XP",debug-threads=on \
-cpu Skylake-Client-IBRS,ss=on,vmx=on,pdcm=on,hypervisor=on,tsc-adjust=on,clflushopt=on,umip=on,stibp=on,arch-capabilities=on,xsaves=on,pdpe1gb=on,ibpb=on,amd-stibp=on,skip-l1dfl-vmentry=on,pschange-mc-no=on,hv-time,hv-relaxed,hv-vapic,hv-spinlocks=0x1fff \
-smp sockets=1,cores=4,threads=2 \
-m 4G \
-vga none \
-drive file=/dev/disk/by-id/ata-C300-MTFDBAK128MAG_0000000011250313A6FD,format=raw,cache=none \
-device vfio-pci,host=05:00.0,multifunction=on,x-vga=on \
-device vfio-pci,host=05:00.1,multifunction=on \
-device usb-ehci \
-device usb-uhci,id=usb1_bus \
-device usb-host,vendorid=0x1e7d,productid=0xafca,bus=usb1_bus.0 \
-device usb-host,vendorid=0x046d,productid=0xc53d,bus=usb1_bus.0 \
-net nic,model=rtl8139 \
-net user

方案二:给Windows XP安装XHCI驱动,改用QEMU XHCI控制器

XHCI是USB3.0控制器,向下兼容所有USB速度等级(高速/全速/低速),但Windows XP原生没有它的驱动。不过可以通过安装第三方适配的驱动来解决这个问题:

操作步骤:

  1. 先保持现有EHCI控制器的配置启动VM,用虚拟PS/2键鼠操作(或者暂时不直通USB设备)
  2. 下载适配XP的XHCI驱动(可以找社区修改的USB3.0驱动包,或者Intel早期发布的XP版XHCI驱动,QEMU的qemu-xhci控制器兼容性很好,大部分这类驱动都能识别)
  3. 在XP里安装驱动,重启系统确保驱动生效
  4. 关闭VM,修改QEMU命令,把-device usb-ehci替换成:
    -device qemu-xhci
    
  5. 重新启动VM,XP会识别XHCI控制器,此时再直通USB设备就不会有速度不匹配问题了。

方案三:强制指定USB设备速度(备选方案)

你可以尝试在USB直通参数里强制指定设备为全速模式,看看能否消除警告:

-device usb-host,vendorid=0x1e7d,productid=0xafca,speed=full
-device usb-host,vendorid=0x046d,productid=0xc53d,speed=full

不过这个方法不一定能彻底解决总线速度不匹配的底层问题,所以优先推荐前两个方案。

备注:内容来源于stack exchange,提问作者ArrayON_56

火山引擎 最新活动