Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I'm trying to access a PCI wifi adapter on a Qemu, simulating vexpress-a9 board.

I'm following is this tutorial which shares a passthrough PCI card of the host machine to a guest machine running on qemu-kvm. But I think its not applicable for qemu-system-arm.

  • Is it possible to passthrough PCI using qemu-system-arm for vexpress-a9?
  • Is there any way to access a PCI card as a USB device in the guest OS? or a host USB device in the guest OS?

Here's what I'm doing:

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
share|improve this question

1 Answer 1

Make sure you go through the steps outlined in this section, 13.3.4. PCI Pass-Through, of the docs, titled: Chapter 13. Running Virtual Machines with qemu-kvm.

excerpt

Procedure 13.1. Configuring PCI Pass-Through

  1. Make sure that CONFIG_DMAR_DEFAULT_ON is set in the host's running Kernel:

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

    If this option is not set, edit your boot loader configuration and add intel_iommu=on (Intel machines) or iommu=pt iommu=1 (AMD machines). Then reboot the host machine.

  2. Check that IOMMU is actively enabled and recognized on the host. Run dmesg | grep -e DMAR -e IOMMU on Intel machines, or dmesg | grep AMD-Vi on AMD machines. If you get no output, check carefully if your hardware supports IOMMU (VT-d) and check that it has been enabled in BIOS.

  3. Identify the host PCI device to assign to the guest.

    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. Unbind the device from host Kernel driver and bind it to the PCI stub driver.

    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. Now run the VM Guest with the PCI device assigned.

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

QEMU/KVM ARM support

According to the changelog for version 1.5 & 1.6 ARM is supported in the following ways:

1.5

  • This release has initial support of KVM for the ARM architecture. This requires a 3.9 or better Linux kernel and a Cortex-A15 CPU.
  • The Zynq board provides a SD host controller interface.
  • The PCI controller model for VersatilePB and Realview boards has been significantly improved in functionality (including MMIO BAR support and a correct PCI IRQ mapping). Note that Linux kernels currently do not take advantage of this; however we autodetect kernels that expect the behaviour of an old broken QEMU and fall back to that. (The old IRQ behaviour can be forced with "-global versatile_pci.broken-irq-mapping=1" if absolutely necessary.)
  • Incorrect handling of the SRS instruction in Thumb mode has been fixed.
  • Performance of TCG emulation of ARM targets is improved over previous releases.
  • Migration and vm save/load now works correctly on the vexpress-a15 and vexpress-a9 models.

1.6

  • The 32-bit ARMv8 LDA/STL instructions for load-acquire/store-release are supported (only with -cpu any); the remainder of the new v8 instructions will follow in a future release.
  • The vexpress-a9 and vexpress-a15 boards have experimental support for virtio devices via a virtio-mmio transport. Note that the virtio command lines used with x86 systems won't work as they will create PCI virtio devices; use the devices "virtio-blk-device", "virtio-net-device", etc instead. Note that this functionality may change in future releases.
  • The -initrd option now accepts ramdisks with a U-Boot header.
  • A model of the Calxeda ECX-2000 / Midway system is now supported ("midway").
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.