QEMU Arm как пробросить карту PCI?

QEMU Arm как пробросить карту PCI?

Я пытаюсь получить доступ к PCI WiFi-адаптеру на QEMU, имитирующем плату vexpress-a9.

Я слежу за тем,этотучебник, который делится транзитной PCI-картой хост-машины с гостевой машиной, работающей на qemu-kvm. Но я думаю, что это не применимо для qemu-system-arm.

  • Возможно ли пробросить PCI с помощью qemu-system-arm для vexpress-a9?
  • Есть ли способ получить доступ к карте 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 Pass-Through

  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 | grep -e DMAR -e IOMMU на компьютерах Intel или dmesg | grep AMD-Vi на компьютерах AMD. Если вы не получили вывод, внимательно проверьте, поддерживает ли ваше оборудование 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.

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

Поддержка QEMU/KVM ARM

Согласно журналу изменений для версий 1.5 и 1.6 ARM поддерживается следующими способами:

1.5

  • В этом выпуске реализована начальная поддержка KVM для архитектуры ARM. Для этого требуется ядро ​​Linux версии 3.9 или выше и процессор Cortex-A15.
  • Плата Zynq обеспечивает интерфейс хост-контроллера SD.
  • Модель контроллера PCI для плат VersatilePB и Realview была значительно улучшена в плане функциональности (включая поддержку MMIO BAR и правильное сопоставление PCI IRQ). Обратите внимание, что ядра Linux в настоящее время не используют это преимущество; однако мы автоматически определяем ядра, которые ожидают поведение старого сломанного QEMU, и возвращаемся к нему. (Старое поведение IRQ можно принудительно задать с помощью "-global universal_pci.broken-irq-mapping=1", если это абсолютно необходимо.)
  • Исправлена ​​некорректная обработка инструкции SRS в режиме Thumb.
  • Производительность эмуляции TCG для ARM-целей улучшена по сравнению с предыдущими версиями.
  • Миграция и сохранение/загрузка виртуальной машины теперь работают корректно на моделях vexpress-a15 и vexpress-a9.

1.6

  • Поддерживаются 32-битные инструкции ARMv8 LDA/STL для load-acquire/store-release (только с -cpu any); остальные новые инструкции v8 появятся в будущем выпуске.
  • Платы vexpress-a9 и vexpress-a15 имеют экспериментальную поддержку устройств virtio через транспорт virtio-mmio. Обратите внимание, что командные строки virtio, используемые с системами x86, не будут работать, поскольку они создают устройства PCI virtio; вместо этого используйте устройства "virtio-blk-device", "virtio-net-device" и т. д. Обратите внимание, что эта функциональность может измениться в будущих выпусках.
  • Опция -initrd теперь принимает ramdisk с заголовком U-Boot.
  • Теперь поддерживается модель системы Calxeda ECX-2000 / Midway («midway»).

Связанный контент