
PCI 패스스루를 사용해 보고 싶습니다. 오래된 캡처 비디오 카드를 Windows XP 클라이언트에 전달했습니다.
IOMMU
활성화
vfio_pci
됨
다음 명령을 실행합니다.
virsh nodedev-detach pci_0000_05_05_0
lspci -s 00:05 -v
PCI 장치가 "실행 중"이라고 보고 vfio
하지만 PCI 장치로 XP를 부팅하면 다음 오류가 반환됩니다.
Please ensure all devices within the iommu_group are bound to their vfio bus driver.
내가 뭘 잘못했나요?
답변1
해결책을 찾았습니다. 먼저 IOMMU 그룹을 식별해야 합니다. 내 경우에는 11입니다. ( lspci
내 경우에는 pci 주소를 사용하고 읽는다는 것을 알았습니다. )
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
qemu
따라서 , with 에 05:05 및 05:06(그룹의 두 PCI 카드)을 추가해야 합니다 libvirt
. virt-manager를 사용하면 하드웨어를 추가하고 PCI 호스트를 선택하는 것이 쉽습니다. 이제 시작합니다... 또 다른 오류가 나타납니다 dmesg
.
"Flags mismatch irq 21. 00000000 (vfio-intx(0000:05:05.0)) vs. 0000000....usb...."
이는 시스템이 인터럽트를 공유할 수 없으므로 호스트에서 장치를 제거해야 함을 의미합니다.
따라서 우리는 인터럽트를 찾아야 합니다:
cat /proc/interrupts | grep 21
예를 들어 usb2를 반환하므로 usb 디렉토리를 검색합니다.
find /sys/devices/pci0000\:00/0000\:00\:* -iname usb2
, USB 디렉토리로 이동합니다. 제 경우에는 13.2입니다.
cd /sys/devices/pci0000\:00/0000\:00\:13.2/
호스트에서 제거되었습니다(sic!).
echo -n 1 > remove
이제 게스트가 부팅되면 PCI 카드가 게스트에 할당됩니다.
다시 우리에게 돌아오려고? 해결책을 찾으면 답변을 추가하겠습니다!