如何让 Qemu USB Passthrough 适用于 iPad / iPhone?

问题描述 投票:0回答:2

我正在尝试设置 Mac OS 虚拟机来进行 iPad 开发。主机系统是 Ubuntu 18.04,我使用 Ubuntu 存储库中的库存 qemu 软件包。

我已经使用 这些说明启动并运行了 Mojave VM,并且在启动 VM 的脚本中,我添加了这一行:

  -device usb-host,vendorid=0x05ac,productid=0x12ab \

根据 lsusb 的说法,有问题的设备是 iPad Air 2 和 iPad Mini 4,它们似乎共享相同的产品 ID。

问题是:当我启动到 Mojave VM 时,当我插入 iPad 时,我看到它在

ioreg -p IOUSB
中出现几秒钟,然后消失。其他设备(我尝试了 USB LTE 调制解调器和 USB RS232 接口)不会执行此操作;它似乎特定于 iDevices。

在主机端,我看到设备似乎在循环中连接和断开。这是我在

dmesg -w
中看到的内容:

[  483.734771] usb 1-2.4.1: new high-speed USB device number 39 using xhci_hcd
[  483.849408] usb 1-2.4.1: New USB device found, idVendor=05ac, idProduct=12ab
[  483.849416] usb 1-2.4.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  483.849420] usb 1-2.4.1: Product: iPad
[  483.849425] usb 1-2.4.1: Manufacturer: Apple Inc.
[  483.849435] usb 1-2.4.1: SerialNumber: <xxx>
[  484.543671] usb 2-2.1.4.1.3.3: reset SuperSpeed USB device number 9 using xhci_hcd
[  488.616849] usb 1-2.4.1: reset high-speed USB device number 39 using xhci_hcd
[  488.732805] usb 1-2.4.1: device firmware changed
[  488.733301] usb 1-2.4.1: USB disconnect, device number 39
[  488.824694] usb 1-2.4.1: new high-speed USB device number 40 using xhci_hcd
[  488.938611] usb 1-2.4.1: New USB device found, idVendor=05ac, idProduct=12ab
[  488.938613] usb 1-2.4.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  488.938614] usb 1-2.4.1: Product: iPad
[  488.938615] usb 1-2.4.1: Manufacturer: Apple Inc.
[  488.938616] usb 1-2.4.1: SerialNumber: <xxx>
[  490.961709] usb 1-2.4.1: reset high-speed USB device number 40 using xhci_hcd
[  491.076908] usb 1-2.4.1: usbfs: process 2557 (gvfs-gphoto2-vo) did not claim interface 0 before use
[  494.579362] usb 2-2.1.4.1.3.3: reset SuperSpeed USB device number 9 using xhci_hcd
[  531.110536] usb 1-2.4.1: USB disconnect, device number 40
[  533.905116] usb 1-2.4.1: new high-speed USB device number 41 using xhci_hcd
[  534.019231] usb 1-2.4.1: New USB device found, idVendor=05ac, idProduct=12ab
[  534.019237] usb 1-2.4.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  534.019241] usb 1-2.4.1: Product: iPad
[  534.019244] usb 1-2.4.1: Manufacturer: Apple Inc.
[  534.019247] usb 1-2.4.1: SerialNumber: <xxx>
[  534.602098] usb 1-2.1.4.4: USB disconnect, device number 17

请注意,上面并不是我在物理上连接和断开连接——有些东西是自己做的。另外值得注意的是,如果我的虚拟机没有运行(或者如果我删除了设置 USB 直通的线路),我就不会出现此连接/断开循环

我尝试过的事情

我一直在假设这是主机(可能是 udevd)正在做的事情,这会阻止 qemu(我猜是 libusb)能够保留设备。为此,我一直在检查并禁用任何看起来可能涉及的 udev 规则。具体来说,我为以下 udev 文件创建了指向

/dev/null
的符号链接:

  • /etc/udev/rules.d/39-usbmuxd.rules
  • /etc/udev/rules.d/60-libgphoto2-6.rules
  • /etc/udev/rules.d/90-libgpod.rules

我还尝试禁用 gphoto2 服务,如下所示:

systemctl --user stop gvfs-gphoto2-volume-monitor.service

尽管有所有这些事情,但行为本质上是相同的。另外值得注意的是:即使在禁用所有这些功能之后,当我连接 iPad 时,内核仍然以某种方式检测 iPad,并将其序列号等记录到系统日志中,并且我已经达到了关于如何在 Linux 上禁用这些功能的知识极限!

如何让我的 iPad 出现(并保留)在我的 qemu 虚拟机中?

iphone macos usb qemu kvm
2个回答
0
投票

您需要chown

/dev/bus/usb/[bus]/[device]
中与总线和设备对应的文件,也许还可以添加
id=iphone
,但主要是更改所有权。


0
投票

我找到了一个工作解决方案,用于从 Ubuntu 24.04 中将 USB 控制器卡分配给虚拟机。

xhci_hcd 被编译到内核中,而不是作为模块。因此,当您将 USB 控制器 ID 放入 GRUB_CMDLINE_LINUX_DEFAULT 中时,USB 控制器仍将与 xhci_hcd 绑定,因为它已经位于内核内部。要确认您的内核是否已编译 xhci_hcd:

modprobe -D xhci_hcd

如果你的输出是:

builtin xhci_hcd

那么你的内核包含 xhci_hcd。

所以你指示:

sudo apt-get -y install driverctl
sudo driverctl -v set-override 0000:2d:00.3 vfio-pci

一旦执行此命令,Linux 将无法再访问插入 USB 控制器卡的任何 USB 设备(键盘、鼠标、相机、iPhone 等)。由于某种原因,我的 MSI B350 PC-Mate(最新 BIOS 为 2024 年 9 月)将我的所有 USB 控制器卡以及 SATA、以太网、nVidia GTX 1050 放在 IOMMU 组 15 中,并且 IOMMU 组无法拆分。然而,它确实将 MSI 主板 USB 3.0 控制器单独放在 IOMMU 组 23 中(这些是从计算机背面的 I/O 护罩引出的 USB 3.0 端口)。所以,无论如何。我将键盘、鼠标、Xbox 360 控制器接收器、3d connexion spacemouse 接收器和网络摄像头插入集线器,插入 USB 2 插槽:这些连接到 IOMMU 组 15 并且未更改。

© www.soinside.com 2019 - 2024. All rights reserved.