- bios或uefi开启vt-d
- vfio passthrough(Linux 内核3.9 之后 & qemu-3.0之后)
#查看pcie pcie 设备
lspci -vvv -d 1d22:
#解绑baremetal driver,绑定vfio driver
sudo sh -c "echo 0000:02:00.0 > /sys/bus/pci/devices/0000\:02\:00.0/driver/unbind"
sudo sh -c "echo 1d22 3684 > /sys/bus/pci/drivers/vfio-pci/new_id"
#centos 可以配置系统中
sudo sh -c "echo options vfio-pci ids=1d22:3684 > /etc/modprobe.d/vfio.conf"
sudo sh -c "echo vfio-pci > /etc/modules-load.d/vfio-pci.conf"
#unbuntu 配置系统
cat /etc/modules
vfio
vfio_pci
#qemu 5.2.0编译
./configure --enable-kvm --python=python3.6 --target-list=x86_64-softmmu --enable-debug --enable-debug-info --disable-strip --enable-plugins --disable-user --disable-linux-user --disable-bsd-user --disable-sdl --disable-gtk --disable-vnc
cd build & make
#qemu 指定vfio 设备启动
./qemu-system-x86_64 -m 4G -smp 8 -drive file=../../xenial-server-cloudimg-amd64-disk1.img -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22 --enable-kvm -nographic -device vfio-pci,host=02:00.0
- pci-stub assign(Linux 内核3.9 之前 & qemu-2.0之前)
sudo sh -c "echo options vfio-pci ids=1d22:3684 > /etc/modprobe.d/vfio.conf"
sudo sh -c "echo vfio-pci > /etc/modules-load.d/vfio-pci.conf"
sudo sh -c "echo vfio > /etc/modules-load.d/vfio-pci.conf"
- 查看MSI中断
guest os查看:
cat /proc/interrupts|grep PCI-MSI
host os 查看:
cat /proc/interrupts|grep vfio-msi (因为interrupt remap host看不到中断报告正常)
需要注意的是device driver 做pcie ATU mmap时,物理地址使用硬件config space里的,不要到bios读取(qemu 默认使用的seabios pcie config space 与硬件不一致)
pcibios_resource_to_bus(pdev->bus, ®ion, &pdev->resource[bar])//错误