Вопрос или проблема
Я пытаюсь подключить хост-компьютер к гостевой системе по 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.
Приложение:
- Убедитесь, что у вас есть права администратора, так как управление USB требует повышенных привилегий.
- Идентифицируйте подключенное USB-устройство, выполнив команду
lsusb
на хосте. Это позволит вам получить идентификатор устройства видаVendorID:ProductID
. - Добавьте соответствующие параметры в вашу команду 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"
- Запустите виртуальную машину, и устройство должно быть доступно в гостевой системе, где вы сможете использовать ADB для отладки.
Такое решение позволит вам использовать аппаратное USB-устройство напрямую в Android VM для выполнения задач отладки или других целей, где требуется физическое подключение.