如何使Qemu USB Passthrough在iPad / iPhone上运行?

时间:2018-10-02 23:13:33

标签: iphone macos usb qemu kvm

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

我已经使用these instructions启动并运行了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

请注意,以上内容并不是我实际进行的连接和断开连接-某些事情是自己完成的。还要注意的是,如果我的VM未运行(或者如果我删除了设置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,并将其序列号等记录到syslog中,而我在Linux上如何禁用硬件方面的知识已达到极限。 !

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

1 个答案:

答案 0 :(得分:0)

您需要在 sh ("export PYTHONUNBUFFERED=1; awx --conf.insecure --conf.host ${ansibleUrl} --conf.username ${ANSIBLE_USERNAME} --conf.password ${ANSIBLE_PASSWORD} job_templates launch --extra_vars @ansible_extra_vars_file.json --monitor $ANSIBLE_JOB_TEMPLATE_ID ") 中 chown 与总线和设备对应的文件,也可能添加 /dev/bus/usb/[bus]/[device] 但主要是更改所有权。