TL;DR: Берем исходники ядра из бакопортов и собираем с новой плюшкой. Добавляем отсутствующие файлы с firmware.
В отличие от разработчиков Ubuntu, команда Debian не спешит включать в поставляемом с дистрибутивом ядре CONFIG_DRM_I915_GVT_KVMGT. Поэтому для начала читаем инструкцию по сборке дебиановских ядер из исходников, а потом собираем.
Мой процессор 8ого поколения слишком хорош для ядра 4.19, и оно отказалось включать gvt-g, сообщив в dmesg: [drm] Unsupported device. GVT-g is disabled. Так что пришлось тащить свежак из бакпортов.
В статье буду исходить из того, что бакпорты уже подключены, а необходимые для сборки ядра пакеты уже установлены.
1. Готовим исходники ядра.
$ sudo apt install linux-source-5.4 -t buster-backports $ mkdir ~/build $ cd ~/build $ tar xaf /usr/src/linux-source-5.4.tar.xz
2. Готовим конфиг.
Для того, чтобы не сочинять конфиг с нуля, берем готовый из пакета с ядром.
$ sudo apt install linux-image-5.4.0-4-amd64-unsigned -t buster-backports $ cp /boot/config-5.4.0-4-amd64 ~/build/linux-source-5.4/.config $ sudo apt purge linux-image-5.4.0-4-amd64
Включаем gvt-g
$ cd ~/build/linux-source-5.4/ $ ./scripts/config --set-val CONFIG_DRM_I915_GVT y $ ./scripts/config --set-val CONFIG_DRM_I915_GVT_KVMGT m $ ./scripts/config --set-val CONFIG_VFIO m $ ./scripts/config --set-val CONFIG_VFIO_MDEV m $ ./scripts/config --set-val CONFIG_VFIO_MDEV_DEVICE m
Удаляем упоминание дебиановых ключей (которых у нас нет)
$ ./scripts/config -d CONFIG_SYSTEM_TRUSTED_KEYS
Убеждаемся, что ничего не забыли
$ make oldconfig
3. Собираем
$ make deb-pkg
Если будет поругиваться на отсутствующие пакеты, то читать и ставить, потом снова запускать make deb-pkg.
4. Ставим ядро из нашего пакета
$ cd .. $ sudo dpkg -i linux-image-5.4.13_5.4.13-1_amd64.deb
В процессе update-initramfs ругнулся на отсутствующую фирмварь. А значит…
5. …ставим из бэкпортов свежие пакеты с firmware.
Смотрим, какие сейчас пакеты стоят
$ apt list --installed | grep ^firmware
Обновляем нужное:
$ apt install firmware-linux-nonfree firmware-misc-nonfree firmware-iwlwifi -t buster-backports
Если update-initramfs продолжает ругаться на отсутствующие файлы (в моём случае это bxt_huc_ver01_8_2893.bin, icl_dmc_ver1_07.bin, tgl_dmc_ver2_04.bin), то придется нагуглить, положить в /lib/firmware и запустить руками:
$ update-initramfs -u -k all
Больше не ругается? Ну и хорошо.
6. Добавляем модули в автозагрузку. Пишем в файл /etc/modules-load.d/gvt-g.conf:
mdev vfio_mdev kvmgt
7. Добавляем параметров ядру. Пишем в /etc/default/grub:
GRUB_CMDLINE_LINUX="i915.enable_gvt=1 kvm.ignore_msrs=1 intel_iommu=on i915.enable_guc=0"
Не забываем запустить:
# update-grub
8. Перезагружаемся и убеждаемся, что плюшка включилась:
$ ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types i915-GVTg_V5_2 i915-GVTg_V5_4 i915-GVTg_V5_8
Если этих трех каталогов не появилось, то смотрим dmesg и гуглим.
9. Идем например сюда и читаем, как запустить виртуальную машину.
Tags: Copy-Paste HOWTO