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ヘッダーを持つRAMディスクを受け入れます。
  • Calxeda ECX-2000 / Midwayシステムモデル(「midway」)がサポートされます。

おすすめ記事