QEMU Arm 如何透傳 PCI 卡?

QEMU Arm 如何透傳 PCI 卡?

我正在嘗試存取 QEMU 上的 PCI WiFi 適配器,模擬 vexpress-a9 板。

我關注的是教學將主機的直通 PCI 卡共用給運行在 qemu-kvm 上的客戶機。但我認為它不適用於 qemu-system-arm。

  • vexpress-a9 可否使用 qemu-system-arm 直通 PCI?
  • 有什麼方法可以在來賓作業系統中將 PCI 卡作為 USB 裝置存取嗎?或是來賓作業系統中的主機 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。運行 dmesg | Intel 機器上的 grep -e DMAR -e IOMMU,或 dmesg |在 AMD 機器上 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 Guest。

    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 型號上正常運作。

1.6

  • 支援用於載入-取得/儲存-釋放的 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 標頭的 ramdisk。
  • 現在支援 Calxeda ECX-2000 / Midway 系統模型(“midway”)。

相關內容