Zhi Wei 的个人博客
ESXI注入驱动网卡驱动,直通AMD显卡输出
ESXI注入驱动网卡驱动,直通AMD显卡输出

ESXI注入驱动网卡驱动,直通AMD显卡输出

ESXI注入驱动网卡驱动,直通AMD显卡输出

我的宿主机配置:

CPUIntel i5-3570K
Intel E3-1270V2
内存16GB
主板技嘉z77p-d3
显卡AMD HD7950

遇到的坑先写在前面:

  • ESXI版本
    • ESXI版本最高只能安装ESXI 6.7 U3(ESXi670-202207001)
  • VT-D
    • CPU和主板必须支持VT-D。只支持VT是不行的(3570K)
  • 主板设置
    • BIOS(UEFI)中设置CSM关闭
    • 显卡必须支持UEFI启动
  • 结果
    • ESXI6.7 U3下无法直通HD7950(仅指我的宿主机配置)

离线ESXI注入驱动和升级显卡BIOS支持UEFI启动的方法和工具我会写在后面,支持ESXI 8。先上一段大佬的视频,给了我很多启发,并且在PVE7.2下一次成功直通显卡输出画面。

关于ESXI版本

首先第一点,关于ESXI版本的选择,因为技嘉z77p-d3这块主板的网卡是Realtek PCIe GBE Family Controller(RTL8111/8168/8411),ESXI 8并没有集成这张网卡的驱动,所以安装的时候报没有网卡的错误(No Network Adapters)。我首先尝试了向ESXI8注入Net55-r8168驱动包,但是没有成功,原因有两个,第一驱动本身就不支持ESXI 8, 第二点,驱动包的签名过期了,官方说从ESXI 6.7 U2开始就不能离线注入非官方签名的驱动包了。

于是我开始尝试从ESXI6.7最新的版本开始注入,在ESXi670-202207001这个版本成功注入了驱动,过程也是曲折。后面我会详细介绍过程。

https://docs.vmware.com/en/VMware-vSphere/6.7/rn/esxi670-202207001.html

宿主机配置

第二个关于硬件配置,CPU必须支持Intel® Virtualization Technology for Directed I/O (VT-d),一般Intel i5 i7 基本上是肯定支持的VT/VT-D的,但我的CPU是3570K,就因为可以超频,所以不支持VT-D了。所以发动钞能力,参考技嘉的官方CPU支持列表,淘宝搞一块E3-1270v2花了¥170。

然后是显卡,在网上查找资料的时候,我发现很多成功案例都是使用UEFI的固件安装操作系统,但是同样也有人提出必须使用传统BIOS的方式安装操作系统,所以我决定给HD7950升级一下固件,同时支持两种启动方式,增加试错的次数,来实现直通的目标。

关于结果

第三个关于为什么没有成功,我觉得前面出视频的大佬有一个观点我是很赞同的,ESXI可能更加偏向于专业领域,对于消费级显卡和硬件的支持就不是特别好,尤其是AMD的显卡,网上大多数成功的案例,基本上都是使用NVIDIA的消费级显卡,我自己也曾经使用过ESXI6,在生产环境中直通NVIDIA GRID K1专业卡,一切都很顺利,没有什么报错,甚至也没有额外修改过虚拟机配置。

也就因为这次成功的经历,让我误以为这次折腾不会很费精力,也才有了这篇文章。我大概描述一下我尝试过的配置,也许能够给有需要的带来一点启发。

  1. 引导方式
    • 首先宿主机尝试过使用BIOS/UEFI的方式引导启动,并且在这两种模式下安装客户机的操作系统分别尝试了BIOS和UEFI的引导方式,在不配置任何命令的情况下,虚拟机是能够正确识别到显卡的。但是安装驱动会导致宿主机死机。
  2. 操作系统
    • 操作系统我尝试过win7X64 和win10X64 21H2,安装AMD官网下载的经过微软WHQL认证的驱动。只要显卡被成功驱动,客户机就会死机,但是原来显示ESXI界面的显示器,会显示纯黑界面,但不是没有信号。这个时候尝试重启客户机,就会导致宿主机死机。
  3. 切换显卡
    • 尝试过在客户机安全模式下禁用vmware自带的显卡,可以解决客户机和宿主机死机的问题,但是仅限于显卡没有被成功驱动的情况下。Win10有出现过设备管理器中显示独立显卡工作正常,但是DXDIAG程序中看不到OpenGL版本的情况。
  4. 修改配置
    • 虚拟机的配置增加过hypervisor.cpuid.v0=FALSE svga.present=FALSE 诸如此类的参数,但都没有什么用,其中第一条命令,每一篇成功案例都写了这条,但却没有解释这一条命令有什么用,我翻遍了google没有找到这条命令的具体做了什么,svga.present=FALSE命令添加后启动客户机,和手动禁用自带的显卡一样。
  5. 直通配置文件
    • 编辑/etc/vmware/passthru.map直通配置,这个文件可以让本来不能被直通的PCI设备可以被直通,虽然在WEB管理页面中我的HD7950本身就是可选的,我还是按照网上的做法添加设备ID和参数,也并没有什么用处。

经过以上的各种尝试以后,都不能实现我的显卡AMD直通客户机输出画面,所以最终我放弃了ESXI6.7,开始尝试使用PVE虚拟化方案,有心栽花花不开,无心插柳柳成荫,一切都是那么的丝滑,一次就成功了。。。

升级显卡BIOS的方法

下载GPUZ来确认你的显卡支持UEFI启动。

参考教程

https://bbs.nga.cn/read.php?tid=18600640&page=1&forder_by=postdatedesc&rand=55

如果不支持可以选择升级显卡固件,点击UEFI左边的导出,将显卡BIOS文件导出。

注意:升级工具需要python环境,后面注入ESXI驱动也需要。

刷入的工具有很多,可以再OS下操作,也可以进DOS或者PE操作。A卡N卡都可以使用这个工具升级。

在windows上安装配置Python的方法,网上有很多教程,这里说一个重点,python安装好以后需要使用pip安装一个依赖库colorama,先下载https://bootstrap.pypa.io/get-pip.py,然后执行命令pip install colorama

PS C:\Users\AppData\Local\Programs\Python\Python37> .\python.exe .\get-pip.py
Collecting pip
  Downloading pip-23.1.2-py3-none-any.whl (2.1 MB)
     ---------------------------------------- 2.1/2.1 MB 23.9 kB/s eta 0:00:00
Collecting wheel
  Downloading wheel-0.40.0-py3-none-any.whl (64 kB)
     ---------------------------------------- 64.5/64.5 kB 17.5 kB/s eta 0:00:00
Installing collected packages: wheel, pip
  Attempting uninstall: pip
    Found existing installation: pip 20.1.1
    Uninstalling pip-20.1.1:
      Successfully uninstalled pip-20.1.1
Successfully installed pip-23.1.2 wheel-0.40.0
PS C:\Users\AppData\Local\Programs\Python\Python37> pip install colorama
Collecting colorama
  Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Installing collected packages: colorama
Successfully installed colorama-0.4.6

然后下载“AMD and Nvidia GOP update”这款工具,将你导出的显卡固件拖拽到GOPupd.bat上面,最后把升级好的固件刷入显卡就行了。如果升级完成后显卡不能正常工作,也不要慌,找一台有核显的机器在Dos下刷回去就行了。我的HD7950导出的BIOS大小是128KB,但是升级了以后变成了126KB,刷入以后也是正常亮机的。具体参考上面的教程。我已下载好的GOPUpd_v1.9.6.5.rar

ESXI注入驱动

需要win10 1903或者更高版本的环境,因为要用到PowerShell。因为某些不可抗力的原因,我这里用离线安装的方法。

ESXi-Customizer-PS最新版本是V2.9.0

Github项目地址https://github.com/VFrontDe-Org/ESXi-Customizer-PS/releases

如果使用V2.6.0版本就不需要Python环境

下载地址http://vibsdepot.v-front.de/tools/ESXi-Customizer-PS-v2.6.0.ps1

这个关系稍微有些绕,大概是个这么个逻辑关系:

我这里使用的是V2.9.0,因为我第一次尝试的是给EXSI 8注入驱动。首先配置Python环境,可以参考上面升级显卡BIOS的方法,不同的是使用pip安装的是这几个依赖项目:

pip install six psutil lxml pyopenssl

PS C:\Users\AppData\Local\Programs\Python\Python37> .\python.exe .\get-pip.py
#省略
PS C:\Users\AppData\Local\Programs\Python\Python37> pip install six psutil lxml pyopenssl
Collecting six
  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting psutil
  Using cached psutil-5.9.5-cp36-abi3-win_amd64.whl (255 kB)
Collecting lxml
  Using cached lxml-4.9.2-cp37-cp37m-win_amd64.whl (3.8 MB)
Collecting pyopenssl
  Using cached pyOpenSSL-23.1.1-py3-none-any.whl (57 kB)
Collecting cryptography<41,>=38.0.0 (from pyopenssl)
  Downloading cryptography-40.0.2-cp36-abi3-win_amd64.whl (2.6 MB)
     ---------------------------------------- 2.6/2.6 MB 26.2 kB/s eta 0:00:00
Collecting cffi>=1.12 (from cryptography<41,>=38.0.0->pyopenssl)
  Downloading cffi-1.15.1-cp37-cp37m-win_amd64.whl (179 kB)
     ---------------------------------------- 179.3/179.3 kB 25.0 kB/s eta 0:00:00
Collecting pycparser (from cffi>=1.12->cryptography<41,>=38.0.0->pyopenssl)
  Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
     ---------------------------------------- 118.7/118.7 kB 24.3 kB/s eta 0:00:00
Installing collected packages: six, pycparser, psutil, lxml, cffi, cryptography, pyopenssl
Successfully installed cffi-1.15.1 cryptography-40.0.2 lxml-4.9.2 psutil-5.9.5 pycparser-2.21 pyopenssl-23.1.1 six-1.16.0

下载VMware-PowerCLI离线安装包。将安装包解压到PowerShell 模块路径,可以在PowerShell中运行$env:PSModulePath命令查看路径,然后运行下面的命令。

  1. Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    • #修改Windows10执行PowerShell脚本安全等级,远程脚本需要前面,本地脚本不需要。
  2. Import-Module VMware.PowerCLI
    • #安装VMware.PowerCLI
  3. Get-Module *CLI -ListAvailable
    • #验证安装
  4. Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false
    • #关闭告警
  5. Set-PowerCLIConfiguration -PythonPath “C:\Users\AppData\Local\Programs\Python\Python37\python.exe”
    • #设置Python路径
PS C:\Windows\system32> $env:PSModulePath
C:\Users\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
#我解压到了第二个目录
PS C:\Windows\system32>Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y](Y)  [A] 全是(A)  [N](N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助 (默认值为N): y

PS C:\Windows\system32> Import-Module VMware.PowerCLI
警告: Please consider joining the VMware Customer Experience Improvement Program, so you can help us make PowerCLI a better product. You can join using the following command:

Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $true

VMware's Customer Experience Improvement Program ("CEIP") provides VMware with information that enables VMware to improve its products and services, to fix problems, and to advise you on how best
to deploy and use our products.  As part of the CEIP, VMware collects technical information about your organization鈥檚 use of VMware products and services on a regular basis in association with
your organization鈥檚 VMware license key(s).  This information does not personally identify any individual.

For more details: type "help about_ceip" to see the related help article.

To disable this warning and set your preference use the following command and restart PowerShell:
Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $true or $false.
          Welcome to VMware PowerCLI!

Log in to a vCenter Server or ESX host:              Connect-VIServer
To find out what commands are available, type:       Get-VICommand
To show searchable help for all PowerCLI commands:   Get-PowerCLIHelp
Once you've connected, display all virtual machines: Get-VM
If you need more help, visit the PowerCLI community: Get-PowerCLICommunity

       Copyright (C) VMware, Inc. All rights reserved.


PS C:\Windows\system32> Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false

Perform operation?
Performing operation 'Update VMware.PowerCLI configuration.'?
[Y](Y)  [A] 全是(A)  [N](N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助 (默认值为Y): y

Scope    ProxyPolicy     DefaultVIServerMode InvalidCertificateAction  DisplayDeprecationWarnings WebOperationTimeout
                                                                                                  Seconds
-----    -----------     ------------------- ------------------------  -------------------------- -------------------
Session  UseSystemProxy  Multiple            Unset                     True                       300
User
AllUsers

PS C:\Windows\system32> Get-Module *CLI -ListAvailable


    目录: C:\Program Files\WindowsPowerShell\Modules


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   13.1.0.... VMware.PowerCLI

PS C:\Windows\system32> Set-PowerCLIConfiguration -PythonPath "C:\Users\AppData\Local\Programs\Python\Python37\python.exe"
#设置Python路径
Perform operation?
Performing operation 'Update VMware.PowerCLI configuration.'?
[Y](Y)  [A] 全是(A)  [N](N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助 (默认值为Y): y

Scope    ProxyPolicy     DefaultVIServerMode InvalidCertificateAction  DisplayDeprecationWarnings WebOperationTimeout
                                                                                                  Seconds
-----    -----------     ------------------- ------------------------  -------------------------- -------------------
Session  UseSystemProxy  Multiple            Unset                     True                       300
User
AllUsers

解压缩ESXi-Customizer-PS到任意目录,New一个PowerShell,切换到ESXi-Customizer-PS的工作目录,验证运行状况,运行ESXi-Customizer-PS.ps1 -help

PS C:\Windows\system32> cd C:\Users\Desktop\ESXi-Customizer-PS-2.9.0
PS C:\Users\Desktop\ESXi-Customizer-PS-2.9.0> .\ESXi-Customizer-PS.ps1 -help

This is ESXi-Customizer-PS Version 2.9.0 (visit https://ESXi-Customizer-PS.v-front.de for more information!)

Usage:
  ESXi-Customizer-PS [-help] |  [-izip <bundle> [-update]] [-sip] [-v80|-v70|-v67|-v65|-v60|-v55|-v51|-v50]
                                [-ozip] [-pkgDir <dir>[,...]] [-outDir <dir>] [-vft] [-dpt depot1[,...]]
                                [-load vib1[,...]] [-remove vib1[,...]] [-log <file>] [-ipname <name>]
                                [-ipdesc <desc>] [-ipvendor <vendor>] [-nsc] [-test]

Optional parameters:
   -help              : display this help
   -izip <bundle>     : use the VMware Offline bundle <bundle> as input instead of the Online depot
   -update            : only with -izip, updates a local bundle with an ESXi patch from the VMware Online depot,
                        combine this with the matching ESXi version selection switch
   -pzip              : use an Offline patch bundle instead of the Online depot with -update.
   -pkgDir <dir>[,...]: local directories of Offline bundles and/or VIB files to add (if any, no default)
   -ozip              : output an Offline bundle instead of an installation ISO
   -outDir <dir>      : directory to store the customized ISO or Offline bundle (the default is the
                        script directory. If specified the log file will also be moved here.)
   -vft               : connect the V-Front Online depot
   -dpt depot1[,...]  : connect additional Online depots by URL or local Offline bundles by file name
   -load vib1[,...]   : load additional packages from connected depots or Offline bundles
   -remove vib1[,...] : remove named VIB packages from the custom Imageprofile
   -sip               : select an Imageprofile from the current list
                        (default = auto-select latest available standard profile)
   -v80 | -v70 |
   -v67 | -v65 | -v60 |
   -v55 | -v51 | -v50 : Use only ESXi 8.0/7.0/6.7/6.5/6.0/5.5/5.1/5.0 Imageprofiles as input, ignore other versions
   -nsc               : use -NoSignatureCheck with export
   -log <file>        : Use custom log file <file>
   -ipname <name>
   -ipdesc <desc>
   -ipvendor <vendor> : provide a name, description and/or vendor for the customized
                        Imageprofile (the default is derived from the cloned input Imageprofile)
   -test              : skip package download and image build (for testing)

开始打包集成了网卡驱动的ESXI安装镜像,需要将ESXI升级包补丁包和驱动以及ESXi-Customizer-PS放在同一目录,生成的ISO文件也在这个目录下面。

然后输入命令

.\ESXi-Customizer-PS.ps1 -izip .\ESXi670-202207001.zip -dpt .\net55-r8168-8.045a-napi-offline_bundle.zip -load net55-r8168

-izip 使用一个离线VMware depot包

-dpt 读一个离线包

-load 添加指定包

PS C:\Users\Desktop\ESXi-Customizer-PS-2.9.0> .\ESXi-Customizer-PS.ps1 -izip .\ESXi670-202207001.zip -dpt .\net55-r8168-8.045a-napi-offline_bundle.zip -load net55-r8168

This is ESXi-Customizer-PS Version 2.9.0 (visit https://ESXi-Customizer-PS.v-front.de for more information!)
(Call with -help for instructions)

Logging to C:\Users\AppData\Local\Temp\ESXi-Customizer-PS-5176.log ...

Running with PowerShell version 5.1 and VMware PowerCLI version 13.1.0 build 21624340

Adding base Offline bundle .\ESXi670-202207001.zip ... [OK]

Connecting additional depot .\net55-r8168-8.045a-napi-offline_bundle.zip ... [OK]

Getting Imageprofiles, please wait ...
 [OK]

Using Imageprofile ESXi-6.7.0-20220704001-standard ...
(Dated 06/23/2022 06:48:06, AcceptanceLevel: PartnerSupported,
Updates ESXi 6.7 Image Profile-ESXi-6.7.0-20220704001-standard)

Load additional VIBs from Online depots ...
   Add VIB net55-r8168 8.045a-napi [New AcceptanceLevel: CommunitySupported] [OK, added]

Exporting the Imageprofile to 'C:\Users\Desktop\ESXi-Customizer-PS-2.9.0\ESXi-6.7.0-20220704001-standard-customized.iso'. Please be patient ...


All done.

PS C:\Users\Desktop\ESXi-Customizer-PS-2.9.0>

不出意外的话,All done以后就可以使用镜像进行安装了,不会再出现找不到网卡的情况了。

一条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注