因为某些国内厂商的问题,一直无法完全使用Linux,还是需要一个win虚拟机来跑win下的软件,(不要说用什么wine,wine跑起来真的是依托答辩!)
尝试了vbox和vmware的win7虚拟机但性能一直无法很好,比如没办法有一个显卡,显示性能不佳。(
最终,我们选择了使用qemu/kvm作为跑win虚拟机的软件,并且直通了Inrel核显。
环境
操作系统:Arch Linux
核显:Intel WhiskeyLake-U GT2 [UHD Graphics 620]
虚拟机软件:Virt-manager(libvirt的gui前端)
……
Virt-manager的安装
1
|
sudo pacman -S virt-manager
|
virt-manager简单配置
- 在
/etc/libvirt/libvirt.conf加入
1
2
|
unix_sock_group = 'libvirt'
unix_sock_rw_perms = '0770'
|
- 在
/etc/libvirt/qemu.conf加入
1
2
3
4
5
6
|
vram = [
"/usr/share/ovmf/x64/OVMF_CODE.fd:/usr/share/ovmf/x64/OVMF_VARS.fd"
]
user = "username"
group = "username"
|
username是你的用户名!!!
1
|
systemctl enable libvirtd --now
|
1
2
|
sudo usermod -a -G libvirt $(whoami)
reboot
|
编译qemu
因为我在使用qemu的过程中,如果直接用arch的qemu会有很多错误,所以我选择自己编译一个。在选定好编译参数后,用不了多少时间。
1
2
|
git clone https://mirrors.bfsu.edu.cn/git/qemu.git
cd qemu
|
只要跑这个所只要直通要的东西,其他架构舍弃,若有需要,请自行添加
如果有spice参数依赖报错下载:
sudo pacman -S spice spice-gtk spice-protocol
1
2
|
make -j8
sudo make install
|
这里的-j8依你的CPU而定
如果你跑qemu-system-x86_64 --version
输出类似:
1
2
|
QEMU emulator version 7.2.50 (v7.2.0-347-gcb9c6a8e5a)
Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers
|
就证明qemu已经安装了!
启动GVT-g
- 添加内核参数
编辑
/etc/default/grub在GRUB_CMDLINE_LINUX_DEFAULT添加 intel_iommu=on i915.enable_guc=0
注意空格与引号!!!
- 启动内核模块
编辑/etc/modules-load.d/kvm.conf添加:
1
2
3
|
kvmgt
vfio-mdev
vfio-iommu-type1
|
- 添加内核模块参数
编辑 /etc/modprobe.d/gvt-g.conf添加:
1
|
options i915 enable_gvt=1
|
然后重启系统
找到显卡的GUID,类似0000:00:02.0
以后出现的0000:00:02.0就是这个GUID请不一样的自行修改
1
2
|
ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/
i915-GVTg_V5_4 i915-GVTg_V5_8
|
如果出现文件夹就说明启动成功了!
如果没有文件,那就再重试一遍吧看看是不是哪里漏了还是我写错了……
创建一个虚拟显卡
输出如:5e85791a-76ae-4e8d-a855-2ae2621dbfb3
记住输出的内容以后要用
创建设备,如用i915-GVTg_V5_4:
1
2
|
su
echo "5e85791a-76ae-4e8d-a855-2ae2621dbfb3" > "/sys/devices/pci0000:00/0000:00:02.0/mdev_supported_types/i915-GVTg_V5_4/create"
|
注:
这里切换成su是因为用sudo我这里显示权限不够……
创建虚拟机
在virt-manager内创建一个win10虚拟机
硬盘选择virtio
win的virtio驱动下载:
1
|
sudo pacman -S virtio-win
|
其保存在/var/lib/libvirt/images/virtio-win.iso
新建一个CD加入这个即可获得virtio硬盘驱动,否则win安装程序无法加载硬盘
引导选择uefi
显卡选择VGA
…………
添加虚拟显卡
安装完成后在xml下在<devices>元素中添加:
1
2
3
4
5
|
<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='off'>
<source>
<address uuid='5e85791a-76ae-4e8d-a855-2ae2621dbfb3'/>
</source>
</hostdev>
|
显示设置
在<graphics type='spice'>下添加:
1
|
<gl enable='yes' rendernode='/dev/dri/by-path/pci-0000:00:02.0-render'/>
|
把<domain type='kvm'>修改为:
1
|
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
|
在上面添加:
1
2
3
4
5
6
7
8
|
<qemu:override>
<qemu:device alias="hostdev0">
<qemu:frontend>
<qemu:property name="x-igd-opregion" type="bool" value="true"/>
</qemu:frontend>
</qemu:device>
</qemu:override>
</domain>
|
添加 IVSHMEM 设备
1
2
3
4
|
<shmem name='looking-glass'>
<model type='ivshmem-plain'/>
<size unit='M'>32</size>
</shmem>
|
32使用1080p分辨率
安装显卡驱动
到Intel官网找吧,到这一步相信你可以的!!!
安装完后应该能在任务管理器看到GPU0了
安装virtio driver驱动
之前挂了个virtio的CD,去里面下载就好了
下载spicetools包
1
|
yay -S spice-guest-tools-windows
|
镜像保存在:/usr/share/spice-guest-tools/spice-guest-tools.iso
挂载后安装就好了
安装virtiofs
到https://github.com/winfsp/winfsp下载个msi安装程序,然后在win下安装
1
|
sc create VirtioFsSvc binpath="C:\Program Files\Virtio-Win\VioFS\virtiofs.exe"
|
到服务那里去把这个服务设置成自动即可
然后virt-manager添加一个叫文件系统的硬件
就完成共享文件夹啦!
自启虚拟显卡
编辑 /etc/libvirt/hooks/qemu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/bin/bash
GVT_PCI="0000:00:02.0"
GVT_GUID="5e85791a-76ae-4e8d-a855-2ae2621dbfb3"
MDEV_TYPE="i915-GVTg_V5_4"
WIN="win10"
LINUX="archlinux"
if [ $# -ge 3 ]; then
if [ $1 = "$WIN" -a $2 = "prepare" -a $3 = "begin" ]; then
echo "$GVT_GUID" > "/sys/devices/pci0000:00/$GVT_PCI/mdev_supported_types/$MDEV_TYPE/create"
elif [ $1 = "$WIN" -a $2 = "release" -a $3 = "end" ]; then
echo 1 > /sys/bus/pci/devices/$GVT_PCI/$GVT_GUID/remove
fi
fi
if [ $# -ge 3 ]; then
if [ $1 = "$LINUX" -a $2 = "prepare" -a $3 = "begin" ]; then
echo "$GVT_GUID" > "/sys/devices/pci0000:00/$GVT_PCI/mdev_supported_types/$MDEV_TYPE/create"
elif [ $1 = "$LINUX" -a $2 = "release" -a $3 = "end" ]; then
echo 1 > /sys/bus/pci/devices/$GVT_PCI/$GVT_GUID/remove
fi
fi
|
加入如下内容,注意GUID和虚拟机名称(win10)
最终效果:
