QEMU Arm: Wie kann ich eine PCI-Karte durchreichen?

QEMU Arm: Wie kann ich eine PCI-Karte durchreichen?

Ich versuche, auf einen PCI-WLAN-Adapter auf einem QEMU zuzugreifen und eine vexpress-a9-Karte zu simulieren.

Ich verfolgeDasTutorial, das eine Passthrough-PCI-Karte des Hostcomputers mit einem Gastcomputer teilt, der auf qemu-kvm läuft. Aber ich denke, es ist nicht auf qemu-system-arm anwendbar.

  • Ist es möglich, PCI mit qemu-system-arm für vexpress-a9 durchzureichen?
  • Gibt es eine Möglichkeit, auf eine PCI-Karte als USB-Gerät im Gastbetriebssystem zuzugreifen? Oder als Host-USB-Gerät im Gastbetriebssystem?

Folgendes mache ich:

$ 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

Antwort1

Stellen Sie sicher, dass Sie die in diesem Abschnitt beschriebenen Schritte durchführen.13.3.4. PCI-Pass-Through, der Dokumente mit dem Titel:Kapitel 13. Ausführen virtueller Maschinen mit qemu-kvm.

Auszug

Prozedur 13.1. Konfigurieren von PCI Pass-Through

  1. Stellen Sie sicher, dass CONFIG_DMAR_DEFAULT_ON im laufenden Kernel des Hosts festgelegt ist:

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

    Wenn diese Option nicht festgelegt ist, bearbeiten Sie die Konfiguration Ihres Bootloaders und fügen Sie intel_iommu=on (Intel-Rechner) oder iommu=pt iommu=1 (AMD-Rechner) hinzu. Starten Sie dann den Host-Rechner neu.

  2. Überprüfen Sie, ob IOMMU aktiv aktiviert und auf dem Host erkannt ist. Führen Sie dmesg | grep -e DMAR -e IOMMU auf Intel-Rechnern oder dmesg | grep AMD-Vi auf AMD-Rechnern aus. Wenn Sie keine Ausgabe erhalten, überprüfen Sie sorgfältig, ob Ihre Hardware IOMMU (VT-d) unterstützt, und prüfen Sie, ob es im BIOS aktiviert wurde.

  3. Identifizieren Sie das Host-PCI-Gerät, das dem Gast zugewiesen werden soll.

    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. Trennen Sie das Gerät vom Host-Kerneltreiber und binden Sie es an den PCI-Stub-Treiber.

    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. Führen Sie jetzt den VM-Gast mit dem zugewiesenen PCI-Gerät aus.

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

QEMU/KVM ARM-Unterstützung

Laut Änderungsprotokoll für Version 1.5 und 1.6 wird ARM auf folgende Weise unterstützt:

1.5

  • Diese Version bietet anfängliche Unterstützung von KVM für die ARM-Architektur. Dies erfordert einen Linux-Kernel 3.9 oder besser und eine Cortex-A15-CPU.
  • Die Zynq-Platine bietet eine SD-Host-Controller-Schnittstelle.
  • Das PCI-Controllermodell für VersatilePB- und Realview-Boards wurde in seiner Funktionalität deutlich verbessert (einschließlich MMIO BAR-Unterstützung und einer korrekten PCI IRQ-Zuordnung). Beachten Sie, dass Linux-Kernel dies derzeit nicht nutzen. Wir erkennen jedoch automatisch Kernel, die das Verhalten eines alten, defekten QEMU erwarten, und greifen darauf zurück. (Das alte IRQ-Verhalten kann mit „-global versatile_pci.broken-irq-mapping=1“ erzwungen werden, falls unbedingt erforderlich.)
  • Die falsche Handhabung des SRS-Befehls im Thumb-Modus wurde behoben.
  • Die Leistung der TCG-Emulation von ARM-Zielen wurde im Vergleich zu früheren Versionen verbessert.
  • Migration und VM-Speichern/Laden funktionieren jetzt auf den Modellen vexpress-a15 und vexpress-a9 ordnungsgemäß.

1.6

  • Die 32-Bit-ARMv8-LDA/STL-Anweisungen für Load-Acquire/Store-Release werden unterstützt (nur mit -cpu any); die restlichen neuen v8-Anweisungen folgen in einer zukünftigen Version.
  • Die Karten vexpress-a9 und vexpress-a15 bieten experimentelle Unterstützung für Virtio-Geräte über einen Virtio-mmio-Transport. Beachten Sie, dass die Virtio-Befehlszeilen, die mit x86-Systemen verwendet werden, nicht funktionieren, da sie PCI-Virtio-Geräte erstellen. Verwenden Sie stattdessen die Geräte „virtio-blk-device“, „virtio-net-device“ usw. Beachten Sie, dass sich diese Funktionalität in zukünftigen Versionen ändern kann.
  • Die Option -initrd akzeptiert jetzt Ramdisks mit einem U-Boot-Header.
  • Ein Modell des Calxeda ECX-2000/Midway-Systems wird jetzt unterstützt („Midway“).

verwandte Informationen