Libvirt 和 GPU 通道上 Qemu 覆盖/命令行的新语法

Libvirt 和 GPU 通道上 Qemu 覆盖/命令行的新语法

直到 qemu 6.1.0(和 6.2.0,qemu.conf 中的capability_filters = [ "device.json" ])此配置对于旧 Windows 2000 计算机上的 gpu passtrough 工作正常。脉冲音频方式,使声音不会不同步。

<qemu:commandline>
    <qemu:arg value='-object'/>
    <qemu:arg value='input-linux,id=mouse,evdev=//dev/input/by-id/usb-Logitech_USB_Receiver-if01-event-mouse'/>
    <qemu:arg value='-object'/>
    <qemu:arg value='input-linux,id=kbd,evdev=/dev/input/by-id/usb-_USB_Keyboard-event-kbd,grab_all=on,repeat=on'/>
    <qemu:arg value='-set'/>
    <qemu:arg value='device.hostdev1.x-vga=on'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='ac97,audiodev=ac97'/>
    <qemu:arg value='-audiodev'/>
    <qemu:arg value='pa,id=ac97,server=unix:/tmp/pulse-socket'/>
    <qemu:env name='QEMU_AUDIO_DRV' value='pa'/>
    <qemu:env name='QEMU_AUDIO_DAC_FIXED_FREQ' value='48000'/>
    <qemu:env name='QEMU_AUDIO_DAC_TRY_POLL' value='0'/>
    <qemu:env name='QEMU_AUDIO_ADC_FIXED_FREQ' value='48000'/>
    <qemu:env name='QEMU_AUDIO_ADC_TRY_POLL' value='0'/>
    <qemu:env name='QEMU_AUDIO_TIMER_PERIOD' value='1000'/>
    <qemu:env name='QEMU_PA_SERVER' value='/tmp/pulse-socket'/>
  </qemu:commandline>

但在 6.2.0 之后此配置不再起作用,返回错误“QEMU:没有定义设备“hostdev1””

新的语法是这样的

  <qemu:override>
    <qemu:device alias='hostdev1'>
      <qemu:frontend>
        <qemu:property name='x-vga' type='bool' value='true'/>
      </qemu:frontend>
    </qemu:device>
  </qemu:override>

VGA 工作正常,但 ac97 卡消失了。

我试过这个

  <qemu:override>
    <qemu:device alias='hostdev1'>
      <qemu:frontend>
        <qemu:property name='x-vga' type='bool' value='true'/>
      </qemu:frontend>
    </qemu:device>
    <qemu:device alias='ac97'>
      <qemu:frontend>
        <qemu:property name='audiodev' type='string' value='id=ac97,driver=pa'/>
      </qemu:frontend>
    </qemu:device>
  </qemu:override>
</domain>

但什么也没有,虚拟机在没有声卡的情况下启动,读取日志时缺少“-device ac97,audiodev=ac97”(因此虚拟机上没有声卡)

常问问题:

为什么不使用hdmi 来播放声音?很简单:我的显示器只有一个 vga 端口

为什么不使用 libvirt 中的 ac97?因为我不知道是否可以设置脉冲音频套接字。

答案1

实际上我使用这个解决方法。我在另一个目录(/opt/qemu6)上编译旧的 qemu (6.2)并使用这个二进制文件而不是 /usr 中的新文件(很糟糕......但工作正常)。所以我只能在这个虚拟机上使用旧语法。

相关内容