PCIパススルーを試したい。古いキャプチャビデオカードをWindows XPゲストに渡しました。
IOMMU
が有効になっています。vfio_pci
が読み込まれます
私はこのコマンドを実行します:
virsh nodedev-detach pci_0000_05_05_0
lspci -s 00:05 -v
vfio
がPCIデバイスを「実行中」であると報告しますが、PCIデバイスでXPを起動すると、次のエラーが返されます。
Please ensure all devices within the iommu_group are bound to their vfio bus driver.
何が間違っていたのですか?
私は解決策を見つけました。まず、IOMMUグループを特定する必要があります。私の場合は11です(lspci
を使用してpciアドレスを読み取っています。私の場合は05:05:0です)
find /sys/kernel/iommu_groups/ -type l|grep \/11
/sys/kernel/iommu_groups/11/devices/0000:00:14.4
/sys/kernel/iommu_groups/11/devices/0000:05:06.0
/sys/kernel/iommu_groups/11/devices/0000:05:05.0
したがって、05:05と05:06(グループの2つのPCIカード)をqemu
にlibvirt
で追加する必要があります。これは、virt-manager addハードウェアを使用して、pciHostを選択することで簡単に行えます。ここで起動すると、dmesg
に別のエラーが表示されます。
"Flags mismatch irq 21. 00000000 (vfio-intx(0000:05:05.0)) vs. 0000000....usb...."
これは、システムが割り込みを共有できないことを意味するため、ホストからデバイスを削除する必要があります。
したがって、割り込みを見つける必要があります。
cat /proc/interrupts | grep 21
たとえばusb2を返すので、usbdirを検索します。
find /sys/devices/pci0000\:00/0000\:00\:* -iname usb2
、usb dirに移動します。私の場合は13.2:
cd /sys/devices/pci0000\:00/0000\:00\:13.2/
ホストから(原文のまま!)を削除します。
echo -n 1 > remove
これで、ゲストを起動すると、pciカードがゲストに割り当てられます。
そして、私たちに戻るために?私は答えを追加します...私が解決策を見つけたら!