Подключите QEMU к хосту через USB

Вопрос или проблема

Я пытаюсь подключить хост-компьютер к гостевой системе по USB, однако QEMU имеет много возможностей для подключения эмулируемых устройств, таких как мыши, но мне нужен “сырой” USB.

Моя виртуальная машина работает на android x86, и я хочу использовать отладку по USB, что ни одна из опций не поддерживает. Как я могу это сделать?

Моя текущая установка:

/usr/bin/qemu-system-x86_64 \
    -monitor stdio \
    -smp 2 \
    -cpu host \
    -machine accel=kvm \
    -m 16384 \
    -hda "/home/playerxyt/.aqemu/hdd/Android.qcow2" \
    -boot once=c,menu=off \
    -net nic \
    -net user \
    -rtc base=localtime \
    -name "Android"

Скрипт был создан с помощью aqemu

Насколько мне известно, ни один из соответствующих эмуляторов платформ в QEMU не поддерживает USB в этом “направлении” (то есть, когда Linux-гость запускает устройство-гаджет), просто потому что аппаратная эмуляция USB-контроллера не предлагает эту возможность.

Так что вы не можете этого сделать.

Я также не понимаю, почему это может понадобиться; в конце концов, ADB является транспортно-прозрачным и будет работать через сеть так же хорошо, только с меньшей затратой ресурсов и большей скоростью.

Ответ или решение

Теория:

Подключение гостевой операционной системы к хосту через USB в среде QEMU — задача, требующая понимания архитектуры устройства и применяемых технологии. QEMU — это мощный эмулятор, который позволяет создавать и управлять виртуальными машинами, имитируя различные аппаратные компоненты. Однако, работа с USB в режиме «сырого» подключения имеет свои особенности и ограничения.

QEMU позволяет эмулировать различные устройства, включая устройства ввода, такие как мыши и клавиатуры. Однако, использование USB для подключения хоста к гостю в режиме, который требуется для отладки с помощью Android Debug Bridge (ADB), требует физического проброса USB-устройства из хостовой системы в гостевую.

Пример:

Рассмотрим текущую конфигурацию VM, в создании которой использован скрипт от aqemu:

/usr/bin/qemu-system-x86_64 \
    -monitor stdio \
    -smp 2 \
    -cpu host \
    -machine accel=kvm \
    -m 16384 \
    -hda "/home/playerxyt/.aqemu/hdd/Android.qcow2" \
    -boot once=c,menu=off \
    -net nic \
    -net user \
    -rtc base=localtime \
    -name "Android"

Основная задача — организовать проброс USB устройства в VM. Это требует определённых изменений в командной строке запуска QEMU.

Приложение:

  1. Убедитесь, что у вас есть права администратора, так как управление USB требует повышенных привилегий.
  2. Идентифицируйте подключенное USB-устройство, выполнив команду lsusb на хосте. Это позволит вам получить идентификатор устройства вида VendorID:ProductID.
  3. Добавьте соответствующие параметры в вашу команду QEMU, чтобы подключить USB-устройство:
-usb -device usb-host,hostbus=BUS_ID,hostaddr=DEVICE_ID

Где BUS_ID и DEVICE_ID нужно заменить на соответствующие значения вашего устройства, которые вы нашли с помощью lsusb.

Вот как может выглядеть итоговая команда:

/usr/bin/qemu-system-x86_64 \
    -monitor stdio \
    -smp 2 \
    -cpu host \
    -machine accel=kvm \
    -m 16384 \
    -hda "/home/playerxyt/.aqemu/hdd/Android.qcow2" \
    -boot once=c,menu=off \
    -net nic \
    -net user \
    -rtc base=localtime \
    -usb \
    -device usb-host,hostbus=1,hostaddr=2 \
    -name "Android"
  1. Запустите виртуальную машину, и устройство должно быть доступно в гостевой системе, где вы сможете использовать ADB для отладки.

Такое решение позволит вам использовать аппаратное USB-устройство напрямую в Android VM для выполнения задач отладки или других целей, где требуется физическое подключение.

Оцените материал
Добавить комментарий

Капча загружается...