一 内核配置
按照书上写的配置了内核,BIOS里也启动了IOMMU,但是无论怎么弄都出现 ”qemu-system-x86_64 No IOMMU found. Unable to assign device ”的错误。
这是因为最新的内核里,建议废除KVM_ASSIGN机制,只支持vfio,如果还是使用老的 KVM ASSIGN的话,那么需要手动修改.config文件 “KVM_DEVICE_ASSIGNMENT=y”,才能使用kvm assgin。 注意,要vim手动修改,make menuconfig里面已经没有了
看了一下代码,assigned-dev.c 是kvm_assgin的实现,只有选择CONFIG_KVM_DEVICE_ASSIGNMENT才会对其进行编译
arch/x86/kvm/Makefile:
kvm-$(CONFIG_KVM_DEVICE_ASSIGNMENT) += assigned-dev.o iommu.o
这里是一篇关于如何使用kvm-pci-assign机制的文章
http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM
参考链接
http://www.spinics.net/lists/kvm/msg120779.html
http://nanxiao.me/en/why-does-qemu-complain-no-iommu-found/
二、qemu问题
同样使用kvm-assgin的话,使用最新的QEMU同样存在问题
“qemu-system-x86_64: pci_get_msi_message: unknown interrupt type”
这同样是VFIO的问题
如果想使用kvm-pci-assgin,那么就使用2.6.0以前的QEMU吧
参考链接
http://qemu.11.n7.nabble.com/PATCH-v9-00-25-IOMMU-Enable-interrupt-remapping-for-Intel-IOMMU-td412217.html
另外有个地方可以下载到kvm很多有用的脚本
https://github.com/smilejay/kvm-book.git