转载请注明:http://blog.csdn.net/hubbybob1/article/details/77101913
上一篇文章已经介绍过显卡穿透的linux内核准备过程了,下面就要讲述穿透的额过程。上篇文章:http://blog.csdn.net/hubbybob1/article/details/73920296
首先,查看cpu是否支持虚拟化:

egrep -o '(vmx|svm)' /proc/cpuinfo
//如果支持就会显示如下
vmx
或者
svm

其次就是要查看cpu是否支持 GPU 的PIC穿透,其实这个操作对cpu的要求挺高的,要进入BIOS去查看VT-d。确定好这些就可以操作了。

一、linux下的穿透(主要侧重Ubuntu)

1.修改linux的启动项

//通过命令,修改引导文件
vim /etc/default/grub
//如下内容
#GRUB_HIDDEN_TIMEOUT=0
GRUB_CMDLINE_LINUX_DEFAULT="text"
GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt default_hugepagesz=1G hugepagesz=1G hugepages=16 kvm.ignore_msrs=1 intremap=no_x2apic_optout video=efifb:off,vesafb:off"//使修改的引导文件生效,这个Ubuntu和Centos7下的有所不一样
//ubuntu两个命令
update-grub
update-grub2
//centos7下,很多介绍是/boot/grub2/grub.conf,但是这个并不生效,真正生效的是下面的这个
grep2-mkconfig -o /boot/efi/EFI/centos/grub.conf

添加黑名单

编辑vim /etc/modprobe.d/blacklist.conf blacklist i915
blacklist efifb
blacklist radeon

执行完上面的操作时,重启,reboot
2.重启后查看启动项是否修改成功,

cat /proc/cmdline//查看修改的grub
dmesg | grep -e DMAR -e IOMMU//查看DMAR 的映射

两个命令截图如下:这样就是修改成功了

3.安装依赖库

//ubuntu下的安装
apt-get install libtool liblog4cpp5-dev libavcodec-dev libssl-dev xlibmesa-glu-dev libasound-dev libpng12-dev libfreetype6-dev libfontconfig1-dev libogg-dev libxrandr-dev kvm libgcrypt-dev libsdl-dev libnss3-dev libpixman-1-dev libxfixes-dev libjpeg8-dev libsasl2-dev python-pyparsing gtk+-3.0
apt-get install liblzo2-dev libsnappy-dev libgtk-3-dev librdmacm-dev libibverbs-dev xfslibs-dev libssh2-1-dev libaio-dev glusterfs-server libiscsi-dev libusb-1.0-0-dev libcap-dev libsdl2-dev
//centos7下的安装
yum install lzo-devel snappy-devel gtk2-devel gtk3-devel librdmacm-devel xfsprogs-devel libssh2-devel libaio-devel glusterfs-api-devel libiscsi-devel spice-server-devel libusb1-devel usbredir-devel libcap-devel libattr-devel SDL-devel

反正就是缺少什么就安装什么
4.安装相关的环境
a。celt-0.5.1.3.tar.gz
下载:http://www.celt-codec.org/downloads/ (最新的没用过,可以尝试一下)

tar zxvf celt-0.5.1.3.tar.gz
cd celt-0.5.1.3/
./configure
make
make install

b。安装libcacard-2.5.2.tar
下载:https://www.spice-space.org/page/Libcacard (这些下载都能通过spice官网下载)

tar xvf libcacard-2.5.2.tar
cd libcacard-2.5.2/
./configure
make
make install

出现错误:
vscclient.o: undefined reference to symbol ‘pthread_create@@GLIBC_2.2.5’
error adding symbols: DSO missing from command line
修改Makefile 163行
LIBS= -lz -lrt -lm -lpthread
c。安装 spice-protocol-0.12.12.tar.bz2
下载:https://www.spice-space.org/download.html

tar jxvf spice-protocol-0.12.12.tar.bz2
cd spice-protocol-0.12.12/
./configure
make && make install

d。安装spice server spice-0.12.8.tar.bz2
下载:https://www.spice-space.org/download.html

tar jxvf spice-0.12.8.tar.bz2
cd spice-0.12.8/
./configure  --enable-smartcard --disable-xinerama --enable-opengl --enable-usbdir=yes --enable-usbredir=yes
make
make install

e。安装usb重定向sbredir-0.7.tar.bz2
下载:https://www.spice-space.org/download.html

tar jxvf usbredir-0.7.tar.bz2
cd usbredir-0.7/
./configure
make && make install

f。安装spice-gtk
下载:https://www.spice-space.org/download.html
可以手动安装也可以自动安装

//自动安装
apt-get install libspice-client-gtk-3.0-dev
//下载后解压安装,configure参数与spice server一样

g。最关键的安装就是QEMU的安装
下载:https://www.qemu.org/download/ (下载最新版本)

tar Jxvf qemu-2.10.1.tar.xz
cd qemu-2.10.1/./configure  --target-list=x86_64-softmmu --enable-kvm --enable-gtk --with-gtkabi=3.0 --enable-virtfs --enable-tcg-interpreter --enable-xfsctl --enable-libiscsi --enable-glusterfs --enable-snappy --enable-lzo --enable-rdma --enable-linux-aio --enable-vhost-net --enable-spice --enable-smartcard  --enable-libusb --enable-usb-redir --enable-guest-agent  --enable-libssh2 --enable-sdl --audio-drv-list='oss alsa sdl' make && make install

到此相关的依赖库和环境就搭建完毕了。
5。编写穿透脚本
编写脚本vfio-bind文件如下

#!/bin/bashmodprobe vfio-pcifor dev in "$@"; dovendor=$(cat /sys/bus/pci/devices/$dev/vendor)device=$(cat /sys/bus/pci/devices/$dev/device)if [ -e /sys/bus/pci/devices/$dev/driver ]; thenecho $dev > /sys/bus/pci/devices/$dev/driver/unbindfiecho $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id
done

将脚本命名为vfio-bind 并cp到/usr/bin/

cp vfio-bind /usr/bin/

然后你可以终端输入vfio然后tab键看是否能将此命令补全为vfio-bind
6。在虚拟机启动脚本内即命令qemu-system-x86_64命令下添加如下参数

//先加载模块
modprobe vfio
modprob vfio_pci
//解绑GPU PCI的ID
vfio-bind 0000:00:02.0 //这个命令相当于下面的命令
echo 0000:00:02.0 > /sys/bus/pci/devices/0000:00:02.0/driver/ubind
echo "vfio-pci" > /sys/bus/pci/devices/0000:00:02.0/driver_override
echo 8086 1912 > /sys/bus/pci/drivers/vfio-pci/new_id
//再解绑回来,就是解绑的反过程xhci_hcd,可以通过lspci命令查看,下面会讲到
echo 0000:00:14.0 > /sys/bus/pci/drivers/vfio-pci/unbind
echo0000:00:14.0 > /sys/bus/pci/drivers/xhci_hcd/bind
//qemu参数
-device vfio-pci,host=00:02.0,bus=pci.0,addr=ox2

如何查看VGA的ID呢( 0000:00:02.0)可以查看/sys/bus/pci/devices/下的

ls /sys/bus/pci/devices/ #查看有多少驱动
lspci          #查看每个ID对应的驱动

完成上面的命令就可以查看得知VGA对应的ID为0000:00:02.0,usb控制器对应的是0000:00:14.0,在确定穿透之前,先确定每个设备所在的分组,同一分组的设备必须同时穿透,不然穿透不成功的,如下方法测试,编写脚本group.sh如下:

#!/bin/bash
shopt -s nullglob
for d in /sys/kernel/iommu_groups/*/devices/*; don=${d#*/iommu_groups/*}; n=${n%%/*}printf 'IOMMU Group:%s  ' "$n"lspci -nns "${d##*/}"
done;

查看后的结果如下:

可以查看到VGA在group1内,而且在组内只有一个,但是可以看到在,group 3内有两个设备 usb controller和signal processing controller两个,如果要穿透USB的话必须要同时加上signal processing controller (0000:00:14.2),同样可以看到group 7也是一样的。
因此VGA和USB同时穿透如下:

vfio-bind 0000:00:02.0 0000:00:14.2 0000:00:14.0 #解绑
//qemu-system-x86_64命令参数
-device vfio-pci,host=00:02.0,bus=pci.0,addr=0x2 \
-device vfio-pci,host=00:14.2 \
-device vfio-pci,host=00:14.0 \

解绑前后的对比,使用命令

lspci -nnk
lspci -vvk #这个命令更详细一点

解绑前

解绑后,就不能使用本地的终端查看了,因为本地的usb已经不存在,所以只用通过远程ssh连接来查看。

通过对比可以看到,本地解绑后的驱动都变成vfio-pci.到此基本上VGA和USB的穿透也就基本结束了,看着过程很复杂其实很简单。
需要注意的是:
1,在穿透VAG时 的qemu启动命令的执行环境,不能是桌面环境,应为桌面环境VGA正在被占用,是没办法穿透的,必须在字符终端界面或者远程ssh连接终端的情况下才会穿透成功。
2.在穿透USB的情况是,一旦USB解绑了,在本地是无法使用的,而在虚拟机启动的过程中也是无法使用的,因为虚拟机windows下并没有USB的驱动,需要安装,那这就有问题了,一旦解绑了,在ubuntu下无法使用,在windows下也无法使用,这该怎么办,其实可以这样解决,下载安装带有USB3.0驱动的ISO镜像,不用在自己安装或者先穿透USB,不穿透VGA,通过spice远程连接,安装驱动精灵,安装usb驱动,安装好后,再重新启动VGA穿透,两种方法都能成功。
3.在上面的图中我们可以看到声卡的穿透也是可以的,但是要同时穿透4个设备,有的cpu的声卡和网卡是在一个组内,这样就不好穿透声卡了,影响网卡的使用,网卡尽量桥接,本地ubuntu能使用,虚拟机也能使用,如果两个设备在一起,就只能模拟声卡来解决了。(如何模拟声卡我会在另一篇文章中描述)
4.在使用显卡穿透时,一定要注意几个参数的使用,什么意思自己去查qemu文档

-full-screen \
-vga none \
-nodefaults \
-nographic

参考:
https://bbs.archlinux.org/viewtopic.php?id=162768
https://wiki.debian.org/VGAPassthrough

VGA GPU passthrough qemu虚拟桌面pci穿透相关推荐

  1. VGA GPU passthrough qemu虚拟桌面pci穿透--Shell脚本检测与关机

    转载注明:http://blog.csdn.net/hubbybob1/article/details/77199162 本文主要讲解在VGA GPU passthrough成功后,如果关闭虚拟机wi ...

  2. VGA GPU passthrough 虚拟桌面pci穿透--Ubuntu与centos的内核升级步骤

    转载注明:http://blog.csdn.net/hubbybob1/article/details/73920296 在做虚拟化桌面的过程中使用spice很难做到3d效果并且usb打印机穿透过去的 ...

  3. 获取虚拟账号列表失败啥意思_「图」Windows 10 Build 18963发布:可显GPU温度 支持重命名虚拟桌面...

    微软通常会选择在每周三发布Windows 10预览版更新,而本周有点出人意料的在今天发布了20H1分支的最新预览版,而且是更新幅度还蛮大的.最新预览版Build 18963最值得关注的新功能就是在任务 ...

  4. USB虚拟化和虚拟桌面USB重定向

    USB:通用串行总线,是一种外部总线的标准,用于规范主机与外设之间的连接与通讯,其数据传输速度快,支持热插拔,并具有兼容性和透明性,已成为当今个人电脑和大量智能设 备必配的接口.随着虚拟化技术的盛行和 ...

  5. k2虚拟服务器功能,配置图形加速的View虚拟桌面-NVIDIA GRID K2使用指南

    第1章 配置图形加速的View虚拟桌面课程概述 27分钟2节 1-1 1-1使用K2配置图形加速的虚拟桌面课程概述 介绍课程内容.演示使用K2的Windows 7.Windows 10虚拟桌面,介绍课 ...

  6. Nova — 启动 GPU Passthrough 虚拟机(Nova Centric 模式)

    目录 文章目录 目录 NVIDIA Tesla K40 环境 硬件配置 HostOS 配置 OpenStack 配置 VM 配置 TS NVIDIA 2080Ti 环境 HostOS 配置 OpenS ...

  7. 虚拟桌面最佳组合---Windows 7

    从去年开始虚拟桌面开始在国内遍地开花时,其实,用户一直在观望,像是观望楼市一样观望,都在等最好虚拟桌面产品(XenDesktop\View\Microsoft VDI),以及最优的虚拟桌面组合.其实, ...

  8. VMware发布Linux虚拟桌面技术预览版

    VMware发布Linux虚拟桌面技术预览版 在众多客户的一片呼吁声中,VMware在3月中旬发布了Linux虚拟桌面的技术预览版.从此,用户可以通过VMware Horizon View来建立.发布 ...

  9. VDI 虚拟桌面基础架构(VDI,Virtual Desktop Infrastructure)

    VDI 虚拟桌面基础架构(VDI,Virtual Desktop Infrastructure)是许多机构目前正在评估的全新模式.VDI旨在为智能分布式计算带来出色的响应能力和定制化的用户体验,并通过 ...

最新文章

  1. Python学习心得第一周-03练习2
  2. 给共享程序集延迟签名
  3. JIRA 6.3.6版本部署
  4. php 函数传值_传址_函数参数,php函数的传值与传址(引用)详解_PHP教程
  5. android一句话搞定图片加载
  6. 蓝桥杯 ALGO-83 算法训练 阶乘
  7. Excel数据转换成SQL
  8. 勤哲excel服务器点击修改,用勤哲Excel服务器实现工作任务管理系统
  9. Nginx(五)------搭建静态资源服务器
  10. 仿城通网盘分享下载系统源码下载,强大功能完美商用
  11. 如何区分固态硬盘和机械硬盘
  12. word文档如何设置/取消首行输入空格当作缩进
  13. c语言已知斜率 求倾角,直线与方程(一)倾斜角与斜率
  14. 纪念即将逝去的2019
  15. OPENCV入门教程十四:medianBlur中值平滑
  16. 一文了解Web Worker
  17. 低成本2.4G SOC(NYA054E)灯控遥控芯片方案-CI2454/CI2451
  18. Oracle 数据库删除完全重复数据
  19. 产品经理之转载马化腾:改掉这七点,让产品自己说话_36氪
  20. 线性回归模型的性能评价指标

热门文章

  1. echarts 象形图实现三角柱图
  2. Mysql 截取 字符串 小数点 前的数据
  3. 基础练习 2n皇后问题
  4. 全球都在下GTA5,我却从中参透了TCP协议
  5. Vision引擎中环境地形技术信息
  6. 马云老婆张瑛:他能做很多帅男人做不了的事
  7. mac苹果电脑打开应用程序提示错误的处理方法
  8. Java使用SQLServerBulkCopy实现数据库批量操作
  9. java如何监听微信关注事件,Java后端接收用户关注以及发送消息或者取消微信公众号的操作...
  10. 创建索引的三种方式以及删除索引