在 qemu 中使用 ivshmem 需要执行以下步骤。
./ivshmem_server
中启动ivshmem服务器,这将创建一个unix域套接字/tmp/ivshmem_socket
-chardev socket,path=/tmp/ivshmem_socket,id=ivshmem_socket -device ivshmem,chardev=ivshmem_socket,size=1m
现在,如果我们在访客中lspci
,则会显示ivshmem pci设备。
我怎样才能在virt-manager中做同样的事情? 具体来说,我想做两件事。
/tmp/ivshmem_socket
?答案 0 :(得分:1)
传递命令行选项
从virt-manager向qemu传递命令行选项需要执行以下步骤。
virsh edit <name of vm>
,或使用vim /etc/libvirt/qemu/<name of virtual machine>.xml
<domain type='kvm'>
更改为<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
<qemu:commandline> <qemu:arg value='-chardev'/> <qemu:arg value='socket,path=/tmp/ivshmem_socket,id=ivshmem_socket'/> <qemu:arg value='-device'/> <qemu:arg value='ivshmem,chardev=ivshmem_socket,size=1m'/> </qemu:commandline>
执行此操作后,qemu将尝试访问/tmp/ivshmem_socket
,并且由于apparmor(在我的情况下libvirt使用apparmor,它可能也使用SeLinux),访问将被拒绝,并且类似于将显示以下内容。
error starting domain: internal error: process exited while connecting to monitor:
...
virt-manager Failed to connect socket: Permission denied
<强> AppArmor的强>
要修复此错误,需要执行以下两个步骤。
<强> 1。使qemu以root身份运行 (此步骤为optional
,可能不需要您,继续第二步)
/etc/libvirt/qemu.conf
user =
和group =
更改为以下user =&#34; root&#34;
group =&#34; root&#34;
重启PC或libvirt守护程序。
<强> 2。 AppArmor的 强>
/etc/apparmor.d/libvirt
libvirt-<uuid>
文件,将<uuid>
替换为umid of vm 将AppArmor模式更改为抱怨,而不是强制执行,这将允许VM的所有操作,并记录那些应该被阻止的操作。
sudo aa-complain libvirt-<uuid> //replace <uuid> with uuid of vm