WWW.LUSHNIKOV.NET

linux

Intel GVT-G на debian 10

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:

Leave a Reply