PCI 패스스루를 통해 게스트 운영 체제에서 내 장치를 사용할 수 없는 이유는 무엇입니까?

PCI 패스스루를 통해 게스트 운영 체제에서 내 장치를 사용할 수 없는 이유는 무엇입니까?

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 카드가 게스트에 할당됩니다.

다시 우리에게 돌아오려고? 해결책을 찾으면 답변을 추가하겠습니다!

관련 정보