mirror of https://gitlab.com/YuriAlek/vfio
Config made easy. Thanks to @SSStormy
parent
abf1d931ff
commit
ce83fa8068
@ -0,0 +1,41 @@
|
||||
# User.
|
||||
USER=yu
|
||||
|
||||
# Path to VBIOS, IMG, Windows ISO, Virtio iso, ...
|
||||
IMAGES=/home/$USER/vm
|
||||
|
||||
# IOMMU groups for passed devices.
|
||||
IOMMU_GPU=06:00.0
|
||||
IOMMU_GPU_AUDIO=06:00.1
|
||||
IOMMU_USB=07:00.3
|
||||
|
||||
# Virsh devices, only needed if you use virsh.
|
||||
VIRSH_GPU=pci_0000_06_00_0
|
||||
VIRSH_GPU_AUDIO=pci_0000_06_00_1
|
||||
VIRSH_USB=pci_0000_07_00_3
|
||||
|
||||
# PCI BUS ID for binding/unbinding devices.
|
||||
videoid="10de 1184"
|
||||
audioid="10de 0e0a"
|
||||
usbid="1022 145f"
|
||||
videobusid="0000:06:00.0"
|
||||
audiobusid="0000:06:00.1"
|
||||
usbbusid="0000:07:00.3"
|
||||
|
||||
# Images needed for QEMU.
|
||||
VBIOS=$IMAGES/GK104_80.04.C3.00.0F-MODED.rom
|
||||
IMG=$IMAGES/windows.raw
|
||||
VIRTIO=$IMAGES/virtio.iso
|
||||
ISO=$IMAGES/win10.iso
|
||||
HDD=/dev/sdc
|
||||
OVMF=/usr/share/ovmf/x64/OVMF_CODE.fd
|
||||
|
||||
# QEMU options
|
||||
RAM=12G
|
||||
CORES=12
|
||||
|
||||
# To run QEMU as user you need to allow more RAM to be locked by an user.
|
||||
ULIMIT=$(ulimit -a | grep "max locked memory" | awk '{print $6}')
|
||||
|
||||
# Variable used to change the Frame Buffer resolution. Not needed.
|
||||
RES="1920 1080"
|
@ -0,0 +1,42 @@
|
||||
# User.
|
||||
USER=yu
|
||||
|
||||
# Path to VBIOS, IMG, Windows ISO, Virtio iso, Clover, OVMF, ...
|
||||
IMAGES=/home/$USER/vm
|
||||
|
||||
# IOMMU groups for passed devices.
|
||||
IOMMU_GPU=06:00.0
|
||||
IOMMU_GPU_AUDIO=06:00.1
|
||||
IOMMU_USB=07:00.3
|
||||
|
||||
# Virsh devices, only needed if you use virsh.
|
||||
VIRSH_GPU=pci_0000_06_00_0
|
||||
VIRSH_GPU_AUDIO=pci_0000_06_00_1
|
||||
VIRSH_USB=pci_0000_07_00_3
|
||||
|
||||
# PCI BUS ID for binding/unbinding devices.
|
||||
videoid="10de 1184"
|
||||
audioid="10de 0e0a"
|
||||
usbid="1022 145f"
|
||||
videobusid="0000:06:00.0"
|
||||
audiobusid="0000:06:00.1"
|
||||
usbbusid="0000:07:00.3"
|
||||
|
||||
# Images needed for QEMU.
|
||||
VBIOS=$IMAGES/GK104_80.04.C3.00.0F-MODED.rom
|
||||
IMG=$IMAGES/mac-hs.raw,id=disk,format=raw,if=none
|
||||
CLOVER=$IMAGES/Clover-1080.qcow2
|
||||
ISO=$IMAGES/HighSierra-10.13.6-qemu.iso
|
||||
OVMF=$IMAGES/OSX-KVM/OVMF_CODE.fd
|
||||
OVMF_VARS=$IMAGES/vm/OSX-KVM/OVMF_VARS.fd
|
||||
|
||||
# QEMU options
|
||||
MY_OPTIONS="+aes,+xsave,+avx,+xsaveopt,avx2,+smep"
|
||||
RAM=12G
|
||||
CORES=4
|
||||
|
||||
# To run QEMU as user you need to allow more RAM to be locked by an user.
|
||||
ULIMIT=$(ulimit -a | grep "max locked memory" | awk '{print $6}')
|
||||
|
||||
# Variable used to change the Frame Buffer resolution. Not needed.
|
||||
RES="1920 1080"
|
@ -0,0 +1,12 @@
|
||||
[Unit]
|
||||
Description=QEMU virtual machine (%i)
|
||||
|
||||
[Service]
|
||||
#Type=forking
|
||||
#PIDFile=/run/qemu_%i.pid
|
||||
EnvironmentFile=/home/yu/scripts/config-macos
|
||||
ExecStart=/home/yu/scripts/%i.sh
|
||||
#TimeoutStopSec=1m
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@ -1,91 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Check if the script is executed as root
|
||||
if [ "$EUID" -ne 0 ]
|
||||
then echo "Please run as root"
|
||||
exit 1
|
||||
fi
|
||||
# END Check if you are sudo
|
||||
|
||||
# Variables
|
||||
USER=yu
|
||||
IOMMU_GPU=06:00.0
|
||||
IOMMU_GPU_AUDIO=06:00.1
|
||||
IOMMU_USB=07:00.3
|
||||
VIRSH_GPU=pci_0000_06_00_0
|
||||
VIRSH_GPU_AUDIO=pci_0000_06_00_1
|
||||
VIRSH_USB=pci_0000_07_00_3
|
||||
VBIOS=/home/$USER/vm/GK104_80.04.C3.00.0F-MODED.rom
|
||||
IMG=file=/home/$USER/vm/windows.raw,id=disk,format=raw,if=none
|
||||
ISO=/home/yu/vm/win10.iso
|
||||
HDD=file=/dev/sdc,media=disk
|
||||
# HDD=file=/home/$USER/vm/windows.raw
|
||||
OVMF_CODE=/usr/share/ovmf/x64/OVMF_CODE.fd
|
||||
RAM=12G
|
||||
CORES=12
|
||||
RES="1920 1080"
|
||||
# END Variables
|
||||
|
||||
## Kill X and related
|
||||
systemctl stop lightdm
|
||||
killall i3
|
||||
sleep 2
|
||||
|
||||
# Unload the Kernel Modules that use the GPU
|
||||
modprobe -r nvidia_drm
|
||||
modprobe -r nvidia_modeset
|
||||
modprobe -r nvidia
|
||||
modprobe -r snd_hda_intel
|
||||
|
||||
# Kill the console to free the GPU
|
||||
echo 0 > /sys/class/vtconsole/vtcon0/bind
|
||||
echo 0 > /sys/class/vtconsole/vtcon1/bind
|
||||
echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind
|
||||
|
||||
# Detach the GPU from host
|
||||
virsh nodedev-detach $VIRSH_GPU > /dev/null 2>&1
|
||||
virsh nodedev-detach $VIRSH_GPU_AUDIO > /dev/null 2>&1
|
||||
virsh nodedev-detach $VIRSH_USB > /dev/null 2>&1
|
||||
|
||||
# QEMU (VM) command
|
||||
qemu-system-x86_64 -enable-kvm \
|
||||
-nographic -vga none -parallel none -serial none \
|
||||
-enable-kvm \
|
||||
-m $RAM \
|
||||
-cpu host,kvm=off,hv_relaxed,hv_spinlocks=0x1fff,hv_time,hv_vapic,hv_vendor_id=0xDEADBEEFFF \
|
||||
-rtc clock=host,base=localtime \
|
||||
-smp $CORES,sockets=1,cores=$CORES,threads=0 \
|
||||
-device vfio-pci,host=$IOMMU_GPU,multifunction=on,x-vga=on,romfile=$VBIOS \
|
||||
-device vfio-pci,host=$IOMMU_GPU_AUDIO \
|
||||
-device vfio-pci,host=$IOMMU_USB \
|
||||
-drive if=pflash,format=raw,readonly,file=$OVMF_CODE \
|
||||
-device virtio-scsi-pci,id=scsi0 \
|
||||
-device scsi-hd,bus=scsi0.0,drive=rootfs \
|
||||
-drive id=rootfs,$HDD > /dev/null 2>&1 &
|
||||
# END QEMU (VM) command
|
||||
|
||||
# Wait for QEMU to finish before continue
|
||||
wait
|
||||
|
||||
# Reattach the GPU to the host
|
||||
virsh nodedev-reattach $VIRSH_USB > /dev/null 2>&1
|
||||
virsh nodedev-reattach $VIRSH_GPU_AUDIO > /dev/null 2>&1
|
||||
virsh nodedev-reattach $VIRSH_GPU > /dev/null 2>&1
|
||||
|
||||
# Set console resolution
|
||||
fbset -xres $(echo "$RES" | awk '{print $1}') -yres $(echo "$RES" | awk '{print $2}')
|
||||
|
||||
# Re-Bind EFI-Framebuffer and Re-bind to virtual consoles
|
||||
# [Source] [https://github.com/joeknock90/Single-GPU-Passthrough/blob/master/README.md#vm-stop-script]
|
||||
echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/bind
|
||||
echo 1 > /sys/class/vtconsole/vtcon0/bind
|
||||
echo 1 > tee /sys/class/vtconsole/vtcon1/bind
|
||||
|
||||
# Reload the kernel modules
|
||||
modprobe snd_hda_intel
|
||||
modprobe nvidia_drm
|
||||
modprobe nvidia_modeset
|
||||
modprobe nvidia
|
||||
|
||||
# Reload the Display Manager to access X
|
||||
systemctl start lightdm
|
Loading…
Reference in New Issue