LINUX.ORG.RU

KVM QEMU отваливается USB звуковая карта

 , , ,


0

2

Доброго времени суток!

В игровую виртуалку пробрасываю внешнюю звуковуху Creative Sound Blaster.

Пробрасываю так:

qemu-system-x86_64 \
...
-usb \
-device nec-usb-xhci,id=xhci \
-device usb-host,vendorid=0x041e,productid=0x30df,id=usb3.0,bus=xhci.0,port=1
...

Звуковуха пробрасывается, работает, но через пару минут перестает воспроизводить звук. Устройство в госте не пропадает. Через некоторое время звук волшебным образом может появиться. Консоль qemu monitor молчит. Debian 8.

Что я делаю не так?



Последнее исправление: francuz (всего исправлений: 3)

А какой чипсет qemu эмулирует? q35 или i449fx? На втором были проблемы при пробросе usb-устройств.

anonymous
()
Ответ на: комментарий от Disova

в этот, как его, гхм... в енот-лог... Тьфу! В евент-логе смотрите.

Со звуковой картой и т.д. нет ни ошибок, ни предупреждений.

francuz
() автор топика
Ответ на: комментарий от anonymous

А какой чипсет qemu эмулирует? q35 или i449fx? На втором были проблемы при пробросе usb-устройств.

Для проброса видюхи использую OVMF. Увы у меня не получилось поднять виртуалку на q35 чипсете в связке с OVMF. Прочитал кучу инфы, попробовал много вариантов. Удалось только запустить виртуалку. Не видит устройства с которых можно было бы загрузиться. Запускаю так (этот конфиг для тестов здесь видюха qxl):

QEMU_PA_SAMPLES=6144 QEMU_AUDIO_DRV=pa \
qemu-system-x86_64 \
-name $VMNAME \
-monitor stdio \
-enable-kvm \
-m 4096 \
-cpu host,kvm=off \
-smp 4,sockets=1,cores=4,threads=1 \
-machine pc-q35-2.1,accel=kvm \
-drive if=pflash,format=raw,readonly,file=ovmf/origs/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=$OVMFFILE \
-vga qxl \
-net nic,macaddr=52:53:00:00:52:42 -net tap,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown \
-drive file=$IMGFILE,if=scsi,media=disk \
-drive file=$INSTALLCD,if=scsi,media=cdrom,readonly \
-drive file=$DRIVERCD,if=scsi,media=cdrom,readonly \
-rtc base=localtime,driftfix=slew

francuz
() автор топика
Ответ на: комментарий от francuz

-machine pc-q35-2.1,accel=kvm

Это как раз q35-й чипсет.

LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
/usr/bin/qemu-system-x86_64
-name mausoleum,debug-threads=on 
-S -machine pc-q35-2.6,accel=kvm,usb=off,mem-merge=off
-cpu host,hv_time,hv_relaxed,hv_vapic,hv_spinlocks=0x1fff
-m 8192
-realtime mlock=on 
-smp 8,sockets=1,cores=4,threads=2
-uuid 1fbde3ae-b9b9-4207-b66c-74841d145507
-nographic
-no-user-config 
-nodefaults 
-chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-1-mausoleum/monitor.sock,server,nowait
-mon chardev=charmonitor,id=monitor,mode=control
-rtc base=localtime,driftfix=slew
-global kvm-pit.lost_tick_policy=discard
-no-hpet
-no-shutdown
-global ICH9-LPC.disable_s3=1
-global ICH9-LPC.disable_s4=1
-boot menu=off,strict=on
-device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1e
-device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x1
-device ich9-usb-ehci1,id=usb,bus=pci.2,addr=0x3.0x7
-device ich9-usb-ehci1,masterbus=usb.0,firstport=0,bus=pci.2,multifunction=on,addr=0x3
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.2,addr=0x3.0x1
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.2,addr=0x3.0x2
-device virtio-serial-pci,id=virtio-serial0,bus=pci.2,addr=0x4
-drive file=/dev/sdc,format=raw,if=none,id=drive-virtio-disk0,cache=none,aio=native
-device virtio-blk-pci,scsi=on,bus=pci.2,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1
-drive file=/var/lib/libvirt/images/windows-8.img,format=qcow2,if=none,id=drive-virtio-disk1
-device virtio-blk-pci,scsi=off,bus=pci.2,addr=0x7,drive=drive-virtio-disk1,id=virtio-disk1
-drive if=none,media=cdrom,id=drive-sata0-0-0,readonly=on
-device ide-cd,bus=ide.0,drive=drive-sata0-0-0,id=sata0-0-0
-drive if=none,media=cdrom,id=drive-sata0-0-1,readonly=on
-device ide-cd,bus=ide.1,drive=drive-sata0-0-1,id=sata0-0-1
-netdev tap,fd=25,id=hostnet0,vhost=on,vhostfd=28
-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:27:1f:e0,bus=pci.2,addr=0x1
-chardev pty,id=charserial0
-device isa-serial,chardev=charserial0,id=serial0
-chardev spicevmc,id=charchannel0,name=vdagent
-device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0
-device usb-tablet,id=input0
-device intel-hda,id=sound0,bus=pci.2,addr=0x2
-device hda-micro,id=sound0-codec0,bus=sound0.0,cad=0
-chardev spicevmc,id=charredir0,name=usbredir
-device usb-redir,chardev=charredir0,id=redir0
-chardev spicevmc,id=charredir1,name=usbredir
-device usb-redir,chardev=charredir1,id=redir1
-device usb-host,hostbus=3,hostaddr=2,id=hostdev0
-device usb-host,hostbus=3,hostaddr=6,id=hostdev1
-device vfio-pci,host=02:00.1,id=hostdev2,bus=pci.2,addr=0x8
-device virtio-balloon-pci,id=balloon0,bus=pci.2,addr=0x6
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1
-device vfio-pci,host=02:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on
-msg timestamp=on

Так у меня выглядит строка запуска виртуалки через libvirt. Пробрасываю G500 и G13. Родной софт логитека их видит и без проблем с ними работает.

anonymous
()
Ответ на: комментарий от anonymous

Так у меня выглядит строка запуска виртуалки через libvirt. Пробрасываю G500 и G13. Родной софт логитека их видит и без проблем с ними работает.

Попробовал Ваш скрипт. Мой qemu многоe из него не знает, хотя я собираю его из, вроде как, свежих исходников (git.qemu-project.org/qemu.git). Скажите, пожалуйста, то у Вас за версия, и где такую взять?

-device hda-micro,id=sound0-codec0,bus=sound0.0,cad=0

Микрофон работает?

francuz
() автор топика
Ответ на: комментарий от francuz

Я через virt-manager создавал конфиг. Ручками только добавлял проброс видеокарточки и ещё чего-то по-мелочи (типа, микрофона). Этот конфиг перекочевал со стабильного дебьяна на 24-ю федору. На выходных буду обратно мигрировать. Версия qemu в федоре 2.6.

Запускал виртуалку тоже через virt-manager. Напрямую запустить команду вряд ли получится - в основном будет затык с сетью, ибо virt-manager многое сам делает перед запуском qemu.

Микрофон последний раз пробовал ещё на дебьяне. В общем, идёт лаг секунд в 20-30. То есть нормально общаться невозможно. Но данный баг проявляется только при эмуляции hda-карточки, с ac97 работает, по отзывам, нормально. Другое дело, что дрова на ту же ac97 под 64-битную винду найти проблематично.

anonymous
()

Проблема решена.

Ставим последнии версии из sid: qemu-kvm libvirt-bin virt-manager

Во время установки этих пакетов видим сообщение о необходимости установки ядра более свежей версии. Я использовал ядро из backports, оно удовлетворяет требованиям.

Далее, этим скриптом создаю виртуалку:

virt-install \
--accelerate \
-v -d -n win8 \
--features kvm_hidden=on \
--machine q35 \
--vcpus 4 \
--cpu host \
--memory 4096 \
--disk path=/dev/sda6 \
--cdrom=/home/user/iso/ru_windows_8.1_professional_vl_with_update_x64_dvd_4050520.iso \
--cdrom=/home/user/iso/virtio-win-0.1.102.iso \
--boot uefi \
--boot cdrom,hd,menu=on \
--os-variant win7 \
--hostdev 0x1234:0x5678 \
--graphics none \
--host-device=pci_0000_01_00_0 \
--host-device=pci_0000_01_00_1

Он забрасывает и usb звук и видеокарту. После захожу в virt-manager пробегаюсь по настройкам(все ли верно) и пользую созданную виртуалку. Все работает.

francuz
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.