QEMU Arm은 어떻게 PCI 카드를 투명하게 전송합니까?

QEMU Arm은 어떻게 PCI 카드를 투명하게 전송합니까?

vexpress-a9 보드를 에뮬레이션하여 QEMU에서 PCI WiFi 어댑터에 액세스하려고 합니다.

제가 주목하는 것은이것튜토리얼에서는 호스트의 통과 PCI 카드를 qemu-kvm에서 실행되는 게스트와 공유합니다. 하지만 qemu-system-arm에서는 작동하지 않는 것 같아요.

  • vexpress-a9는 qemu-system-arm을 사용하여 PCI를 통과할 수 있습니까?
  • 게스트 운영 체제에서 USB 장치로 PCI 카드에 액세스할 수 있는 방법이 있습니까? 아니면 게스트 OS의 호스트 USB 장치인가요?

이것이 내가 하는 일이다:

$ qemu-system-arm \
-kernel ./zImage \
-M vexpress-a9 \
-cpu cortex-a9 \
-m 1024 \
-smp 2 \
-serial stdio \
-append "root=/dev/mmcblk0p1 rootfstype=ext4 rw raid=noautodetect console=ttyAMA0,38400n8 rootwait devtmpfs.mount=0 vmalloc=256MB mem=1024M" \
-sd ./vexpress-quantal.img

답변1

이 섹션에 설명된 단계를 완료했는지 확인하세요.13.3.4. PCI 패스스루, 문서에서 제목은 다음과 같습니다.13장 qemu-kvm을 사용하여 가상 머신 실행.

발췌

절차 13.1. PCI 패스스루 구성

  1. 호스트가 실행 중인 커널에 CONFIG_DMAR_DEFAULT_ON이 설정되어 있는지 확인하세요.

    $ grep CONFIG_DMAR_DEFAULT_ON /boot/config-`uname -r`
    

    이 옵션이 설정되지 않은 경우 부트로더 구성을 편집하고 intel_iommu=on(Intel 컴퓨터) 또는 iommu=pt iommu=1(AMD 컴퓨터)을 추가합니다. 그런 다음 호스트를 다시 시작하십시오.

  2. IOMMU가 호스트에서 활성화되고 인식되는지 확인하십시오. Intel 시스템에서는 dmesg | grep -e DMAR -e IOMMU를 실행하고, AMD 시스템에서는 dmesg | grep AMD-Vi를 실행하십시오. 출력이 없으면 하드웨어가 IOMMU(VT-d)를 지원하는지, BIOS에서 활성화되어 있는지 다시 확인하세요.

  3. 게스트에 할당할 호스트 PCI 장치를 결정합니다.

    tux@vmhost:~> lspci -nn
    [...] 00:1b.0 Audio device [0403]: Intel Corporation 82801H (ICH8 Family) \
    HD Audio Controller [8086:284b] (rev 02) [...]
    Note down the device (00:1b.0) and vendor (8086:284b) ID.
    
  4. 호스트 커널 드라이버에서 장치를 바인딩 해제하고 PCI 스텁 드라이버에 바인딩합니다.

    tux@vmhost:~> modprobe pci_stub
    tux@vmhost:~> echo "8086 284b" > /sys/bus/pci/drivers/pci-stub/new_id
    tux@vmhost:~> echo "0000:00:1b.0" > /sys/bus/pci/devices/0000:00:1b.0/driver/unbind
    tux@vmhost:~> echo "0000:00:1b.0" > /sys/bus/pci/drivers/pci-stub/bind
    
  5. 이제 PCI 장치가 할당된 VM 게스트를 실행합니다.

    qemu-kvm [...] -device pci-assign,host=00:1b.0
    

QEMU/KVM ARM 지원

버전 1.5 및 1.6의 변경 로그에 따르면 ARM은 다음과 같은 방식으로 지원됩니다.

1.5

  • 이 버전은 처음에 ARM 아키텍처 KVM을 지원합니다. 이를 위해서는 3.9 이상의 Linux 커널과 Cortex-A15 CPU가 필요합니다.
  • Zynq 보드는 SD 호스트 컨트롤러 인터페이스를 제공합니다.
  • VersatilePB 및 Realview 보드용 PCI 컨트롤러 모델은 기능이 크게 향상되었습니다(MMIO BAR 지원 및 올바른 PCI IRQ 매핑 포함). Linux 커널은 현재 이 기능을 활용하지 않습니다. 그러나 오래된 QEMU 동작이 예상되는 커널을 자동으로 감지하고 해당 동작으로 돌아갑니다. (꼭 필요한 경우 "-globalVersatile_pci.broken-irq-mapping=1"을 사용하여 이전 IRQ 동작을 강제할 수 있습니다.)
  • Thumb 모드에서 SRS 명령어의 오류 처리가 수정되었습니다.
  • ARM 대상에 대한 TCG 에뮬레이션 성능이 이전 버전에 비해 향상되었습니다.
  • 이제 vexpress-a15 및 vexpress-a9 모델에서 마이그레이션 및 VM 저장/로드가 올바르게 작동합니다.

1.6

  • load-get/store-release에 대한 32비트 ARMv8 LDA/STL 명령어 지원(-cpu any와 함께만 사용됨), 새로운 v8 명령어의 나머지 부분은 향후 릴리스에서 따를 예정입니다.
  • vexpress-a9 및 vexpress-a15 보드는 virtio-mmio 전송을 통해 virtio 장치에 대한 실험적 지원을 제공합니다. x86 시스템에서 사용되는 virtio 명령줄은 PCI virtio 장치를 생성하므로 작동하지 않습니다. 대신 "virtio-blk-device", "virtio-net-device" 등을 사용합니다. 이 기능은 향후 릴리스에서 변경될 수 있습니다.
  • -initrd 옵션은 이제 U-Boot 헤더가 있는 램디스크를 허용합니다.
  • 이제 Calxeda ECX-2000/Midway 시스템 모델("midway")이 지원됩니다.

관련 정보