Я фанат этого блога! Подписаться

Linux дистрибутивы

На нашем линукс блоге вы можете скачать linux дистрибутивы, а так же найти много информации по линуксу

Subscribe

Эмулятор QEMU и работа с USB в гостевой системе

Июль 15th, 2010

Ситуация: в эмуляторе QEMU требуется работать с USB-устройствами в гостевой (эмулируемой) машине; при этом USB-устройства подключены к хост-машине (т.е. к реальному компьютеру).
Решение: немного чёрной магии, параметр -usb и lsusb спасут отца русской демократии.

Рабочий пример: Windows XP, которая установлена в эмуляторе QEMU, который установлен в Debian GNU/Linux Etch. Для примера затащим в QEMU USB-флешку и будем работать с ней в Windows, которая в QEMU, который в Debian.

Запускаем виртуальную машину QEMU, например, с такими параметрами:

qemu -usb -m 200 -hda mustdiexp.img -boot c -localtime

красным помечен обязательный параметр -usb, т.е. нужно явно указать QEMU, что мы хотим использовать USB. Далее включаем флешку, и в консоли узнаём, куда подключилась наша флешка. В этом нам поможет сначала dmesg, а потом lsusb. При этом dmesg нам скажет адрес устройства, а lsusb – его точный идентификатор.

Как узнать адрес устройства в Linux? Легко – спросим dmesg, и он ответит:

usb 1-6: new high speed USB device using ehci_hcd and address 15
usb 1-6: configuration #1 chosen from 1 choice
scsi9 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 15
usb-storage: waiting for device to settle before scanning
scsi 9:0:0:0: Direct-Access JetFlash TS4GJFV35 8.07 PQ: 0 ANSI: 2
sd 9:0:0:0: [sde] 7987200 512-byte hardware sectors (4089 MB)
sd 9:0:0:0: [sde] Write Protect is off
sd 9:0:0:0: [sde] Mode Sense: 03 00 00 00
sd 9:0:0:0: [sde] Assuming drive cache: write through
sd 9:0:0:0: [sde] 7987200 512-byte hardware sectors (4089 MB)
sd 9:0:0:0: [sde] Write Protect is off
sd 9:0:0:0: [sde] Mode Sense: 03 00 00 00
sd 9:0:0:0: [sde] Assuming drive cache: write through
sde: sde1
sd 9:0:0:0: [sde] Attached SCSI removable disk
sd 9:0:0:0: Attached scsi generic sg4 type 0
usb-storage: device scan complete

Красным я подсветил искомое – адрес нашего устройства 15. Теперь интересуемся у lsusb насчёт идентификатора устройства, и он нам всё выдаст:

penta4@penta4rce:~$ lsusb
Bus 005 Device 005: ID 046d:c03e Logitech, Inc. Premium Optical Wheel Mouse
Bus 005 Device 003: ID 046e:5500 Behavior Tech. Computer Corp.
Bus 005 Device 001: ID 0000:0000
Bus 004 Device 004: ID 03f0:1204 Hewlett-Packard DeskJet 930c
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 015: ID 058f:6387 Alcor Micro Corp.
Bus 001 Device 014: ID 04fc:0c15 Sunplus Technology Co., Ltd
Bus 001 Device 001: ID 0000:0000

Готово: идентификатор нашего устройства 15 есть 058f:6387 С этими данными идём в эмулятор QEMU, заходим в гостевую систему, нажимаем CTRL+ALT+2 и попадаем в консольный режим QEMU. Там мы пишем:

usb_add host:058f:6387

Если QEMU пишет, что не может добавить ваше устройство, а вы уверены, что всё сделано правильно – проверьте права на файл-устройство, оно должно быть с полными (777) правами. В консоли, откуда запущен QEMU, увидите:

/proc/bus/usb/001/015: Permission denied

Стало быть, идём и делаем так:

penta4rce:/proc/bus/usb# chmod -R 777 001/

Не очень изящно, зато работает :-) Можно ещё править udev.rules, но мне под вечер с этим было откровенно лень заниматься.

После этого Windows (или что вы там эмулируете) радостно найдёт ваше устройство (в данном случае флешку) и будет злостно грузить процессор в мучительных раздумьях “что же это было!?” В случае с Windows XP виртуальным диском оно шуршать будет порядочно – по всей видимости, для этого чуда редмонтовской мысли это нормально. После этого работаете с устройством как обычно.

Вот интересный сайт по теме http://xtremesoft.ru/

Комментировать

 


melayu boleh