QEMU Arm ¿cómo pasar a través de una tarjeta PCI?

QEMU Arm ¿cómo pasar a través de una tarjeta PCI?

Estoy intentando acceder a un adaptador PCI WiFi en una QEMU, simulando una placa vexpress-a9.

estoy siguiendo esestetutorial que comparte una tarjeta PCI de paso de la máquina host a una máquina invitada que se ejecuta en qemu-kvm. Pero creo que no es aplicable a qemu-system-arm.

  • ¿Es posible pasar a través de PCI usando qemu-system-arm para vexpress-a9?
  • ¿Hay alguna forma de acceder a una tarjeta PCI como dispositivo USB en el sistema operativo invitado? ¿O un dispositivo USB host en el sistema operativo invitado?

Esto es lo que estoy haciendo:

$ 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

Respuesta1

Asegúrese de seguir los pasos descritos en esta sección,13.3.4. Transferencia PCI, de los documentos, titulado:Capítulo 13. Ejecución de máquinas virtuales con qemu-kvm.

extracto

Procedimiento 13.1. Configuración del paso PCI

  1. Asegúrese de que CONFIG_DMAR_DEFAULT_ON esté configurado en el kernel en ejecución del host:

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

    Si esta opción no está configurada, edite la configuración del cargador de arranque y agregue intel_iommu=on (máquinas Intel) o iommu=pt iommu=1 (máquinas AMD). Luego reinicie la máquina host.

  2. Verifique que IOMMU esté habilitado y reconocido activamente en el host. Ejecute dmesg | grep -e DMAR -e IOMMU en máquinas Intel o dmesg | grep AMD-Vi en máquinas AMD. Si no obtiene ningún resultado, verifique cuidadosamente si su hardware es compatible con IOMMU (VT-d) y verifique que se haya habilitado en BIOS.

  3. Identifique el dispositivo PCI host para asignarlo al invitado.

    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. Desvincule el dispositivo del controlador Kernel del host y vincúlelo al controlador auxiliar 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. Ahora ejecute VM Guest con el dispositivo PCI asignado.

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

Soporte QEMU/KVM ARM

Según el registro de cambios para las versiones 1.5 y 1.6, ARM se admite de las siguientes maneras:

1.5

  • Esta versión tiene soporte inicial de KVM para la arquitectura ARM. Esto requiere un kernel Linux 3.9 o superior y una CPU Cortex-A15.
  • La placa Zynq proporciona una interfaz de controlador de host SD.
  • Se ha mejorado significativamente la funcionalidad del modelo de controlador PCI para placas VersatilePB y Realview (incluida la compatibilidad con MMIO BAR y un mapeo PCI IRQ correcto). Tenga en cuenta que los kernels de Linux actualmente no aprovechan esto; sin embargo, detectamos automáticamente los núcleos que esperan el comportamiento de un QEMU antiguo y roto y recurrimos a eso. (El antiguo comportamiento de IRQ se puede forzar con "-global versátil_pci.broken-irq-mapping=1" si es absolutamente necesario).
  • Se ha solucionado el manejo incorrecto de la instrucción SRS en modo Thumb.
  • El rendimiento de la emulación TCG de objetivos ARM se ha mejorado con respecto a versiones anteriores.
  • La migración y el guardado/carga de VM ahora funcionan correctamente en los modelos vexpress-a15 y vexpress-a9.

1.6

  • Se admiten las instrucciones ARMv8 LDA/STL de 32 bits para cargar, adquirir/almacenar y liberar (solo con -cpu any); el resto de las instrucciones de la nueva v8 se publicarán en una versión futura.
  • Las placas vexpress-a9 y vexpress-a15 tienen soporte experimental para dispositivos virtio a través de un transporte virtio-mmio. Tenga en cuenta que las líneas de comando virtio utilizadas con sistemas x86 no funcionarán ya que crearán dispositivos PCI virtio; utilice los dispositivos "virtio-blk-device", "virtio-net-device", etc. Tenga en cuenta que esta funcionalidad puede cambiar en versiones futuras.
  • La opción -initrd ahora acepta discos ram con un encabezado U-Boot.
  • Ahora se admite un modelo del sistema Calxeda ECX-2000/Midway ("midway").

información relacionada