Я пытаюсь настроить свою беспроводную карту, через которую пройдут в QEMU VM (только для проверки передачи устройства и как это работает). Я могу использовать Wi-Fi на своей хост-машине очень хорошо.
lspci на хосте показывает, что следующая информация имела отношение к карте:
Используемый драйвер ядра является "wl".
Теперь, я пытаюсь развязать драйвер хоста и связать драйвер vfio-pci с моей беспроводной картой следующим образом:
#!/bin/bash
# content of /etc/modprobe.d/local.conf is
# options vfio-pci ids=14e4:4331
# content of /etc/modprobe.d/vfio.conf is
# options vfio_iommu_type1 allow_unsafe_interrupts=1
set -e
BDF="03:00.0"
GRP=12
echo "[+] loading vfio-pci"
sudo modprobe vfio-pci
echo "[+] Finding iommu group"
readlink /sys/bus/pci/devices/0000:${BDF}/iommu_group
echo "[+] Devices in the group"
ls /sys/bus/pci/devices/0000:${BDF}/iommu_group/devices
echo "[+] Unbinding device driver"
echo 0000:${BDF} | sudo tee /sys/bus/pci/devices/0000:${BDF}/driver/unbind
echo "[+] Finding vendor, device ID"
lspci -n -s ${BDF}
val=$(lspci -n -s ${BDF} | cut -d' ' -f3)
vendor=$(echo $val|cut -d':' -f1)
deviceid=$(echo $val|cut -d':' -f2)
echo "-- vendor is ${vendor}"
echo "-- deviceid is ${deviceid}"
echo "[+] Binding to vfio-pci"
echo "${vendor} ${deviceid}" | sudo tee /sys/bus/pci/drivers/vfio-pci/new_id
echo "[+] Checking /dev/vfio"
ls /dev/vfio
echo "[+] checking dmesg for vfio logs"
dmesg | grep -i vfio
На данном этапе выполнение lspci показывает, что устройство связано с драйвером vfio-pci.
Теперь, я загружаю Ubuntu в QEMU с устройством, через которое проходят как следующие аргументы:
-device vfio-pci,host=03:00.0,id=net0
Однако при проверке "lspci-v" в VM, я вижу, что драйвер, связанный с устройством, bcma-pci-bridge
.
Мои сомнения/вопросы:
В первую очередь, я передаю устройства своему VMs, использующему точно этот метод некоторое время, и я никогда не получаю проблемы.
Используя похожий метод для vfio связывают Вас, может вынуждать периферийное устройство связать с определенным драйвером.
Процедура следующим образом, развяжите от формирователя тока, modprobe wl
затем свяжите карту Wi-Fi с ним.
Я не могу гарантировать, что это будет работы, я предполагаю bcma-pci-bridge
используется из-за переотображения iommu, однако когда я связываю свой Wi-Fi Intel с VM, это использует тот же драйвер в качестве хоста.
Попробуйте этот сценарий в своем VM
#!/bin/bash
set -e
BDF="00:04.0"
echo "[+] Unbinding old wifi device driver"
echo 0000:${BDF} | sudo tee /sys/bus/pci/devices/0000:${BDF}/driver/unbind
echo "[+] Finding vendor, device ID"
lspci -n -s ${BDF}
val=$(lspci -n -s ${BDF} | cut -d' ' -f3)
vendor=$(echo $val|cut -d':' -f1)
deviceid=$(echo $val|cut -d':' -f2)
echo "-- vendor is ${vendor}"
echo "-- deviceid is ${deviceid}"
modprobe wl
echo "[+] Binding to wl driver"
echo "${vendor} ${deviceid}" | sudo tee /sys/bus/pci/drivers/wl/new_id
У меня была подобная проблема с внутренними машинами, не берущими мою карту, таким образом, я создал новую виртуальную сеть в virt-manager
с набором NAT для передачи моей беспроводной карте. Я затем использую virtio
и просто выберите ту сеть в настройках VM.
редактирование - я не знаю, смогли ли Вы взаимодействовать с беспроводной картой в способе, которым Вы описали использование этого метода, поэтому возможно, не канонический ответ