计算机拒绝以 UEFI 模式启动 - 显示有关英特尔千兆网卡的错误

计算机拒绝以 UEFI 模式启动 - 显示有关英特尔千兆网卡的错误

我刚刚尝试以 UEFI 模式启动我的机器,但收到此消息:

系统找不到附加网络设备的 UEFI 驱动程序 [0x10D38086]

我正在运行 Debian Linux,但我不确定这是否相关。我不确定我的系统是否已经到达 Linux 部分。

lspci以下是我的网卡的相关输出

0a:00.0 以太网控制器:Intel Corporation 82574L 千兆网络连接

dmidecode我认为主板本身支持 UEFI。这是主板的输出。

dmidecode --type 2
# dmidecode 2.12
SMBIOS 2.7 present.

Handle 0x0002, DMI type 2, 15 bytes
Base Board Information
        Manufacturer: ASUSTeK COMPUTER INC.
        Product Name: SABERTOOTH 990FX R2.0
        Version: Rev 1.xx
        Serial Number: 130309723501985
        Asset Tag: To be filled by O.E.M.
        Features:
                Board is a hosting board
                Board is replaceable
        Location In Chassis: To be filled by O.E.M.
        Chassis Handle: 0x0003
        Type: Motherboard
        Contained Object Handles: 0

答案1

这里的问题是你的网络适配器的固件,或者可选 ROM,不支持UEFI。

附加卡可以有自己的可执行代码,用于预启动环境。显卡上的 VBIOS 用于在启动时初始化 GPU 和显示器,是此类选项 ROM 的一个例子。在网卡上,这通常用于实现远程控制。UEFI 通常1要求网卡的固件包含专门制作的驱动程序,但您的网卡是为旧版 BIOS 系统制作的,因此不包含任何此类驱动程序。因此,它无法在不使用兼容性支持模块(旧版 BIOS 兼容层)且需要更新的 UEFI 系统上运行。

深入挖掘后,我发现错误消息中提供的代码0x10D38086是网卡的 PCI ID。8086:10D3 是英特尔千兆 CT 台式机适配器

搜索此卡可下载找到了固件升级可以安装到 NIC 上来更新选项 ROM,使其支持 UEFI。下载并解压Preboot.tar.gz,然后按照说明更新固件。根据发行说明,选项 ROM 包含 UEFI 驱动程序,它应该可以修复您遇到的错误。

在您的情况下,刷新combo提供 UEFI 和 PXE 支持的固件:

bootutil64e -up=combo -all -FILE=BootIMG.FLB

该实用程序返回的消息仅表明现有固件提供的功能。它将在刷新过程中被覆盖;这是正常的。

刷新固件后,以原生 UEFI 模式重新启动系统,看看它是否正常工作。如果不行,则需要更换网络适配器。


更新:您已表示聊天您在尝试刷新固件时收到此错误:

Connection to QV driver failed - please reinstall it!

看来固件刷新程序需要 iQV 调试驱动程序 ( iqvlinux) 才能运行。驱动程序可以下载这里,但您需要自行编译和加载驱动程序。install脚本是单独下载的,是执行安装所必需的;不要只提取驱动程序包并运行make


1 EFI 驱动程序也可以位于 EFI 系统分区或主板本身的 UEFI 固件中。但是,对于 PCI 和 PCIe 卡,它通常在卡的固件中提供。

答案2

感谢@bwDraco 提供的帮助。

我在这里添加了一些有关这个过程在实践中的具体细节。

首先,我下载并解压了Preboot.tar.gz。警告 - 它不会解压到其自己的目录中,因此请先为其创建一个目录。

请注意,此实用程序支持多种不同的操作系统。不过,我将仅描述它在 Linux 上的运行方式,因为我没有运行任何其他操作系统。此实用程序的主要文档是DOCS/Adapter_User_Guide.pdf

此实用程序的 Linux 版本有两个二进制可执行文件,APPS/BootUtil/Linux_x64/bootutil64e(64 位)和 APPS/BootUtil/Linux32$ ls bootutil32(32 位)。bootutil 的文档为APPS/BootUtil/Docs/bootutil.txt

然后我将文件复制APPS/BootUtil/Linux_x64/bootutil64e/usr/local/bin,但我必须先将其设为可执行文件。当我运行它时,我得到了

root@orwell:/home/faheem# bootutil64e -?
Connection to QV driver failed - please reinstall it!

然后需要iqvlinux.tar.gz从以下位置下载 Linux 内核模块源档案:https://sourceforge.net/projects/e1000/files/iqvlinux/1.2.0.3/

注意:那里有一个 rpm,但尝试将其转换为 deb 看起来毫无希望。它甚至似乎不包含二进制文件,只有源文件和标头。这并不明显,但还需要install同一目录中的脚本。然后运行

sh install

或类似于用户(以 root 身份运行奇怪的脚本永远不是一个好主意),确保iqvlinux.tar.gz与脚本处于同一级别install

这给出了输出

faheem@orwell:/usr/local/src/iqvlinux$ sh install
Extracting archive..OK!
make: Entering directory '/usr/local/src/iqvlinux/iqvlinux/src/linux/driver'
make -C /lib/modules/3.16.0-4-amd64/build SUBDIRS=/usr/local/src/iqvlinux/iqvlinux/src/linux/driver modules
make[1]: Entering directory '/usr/src/linux-headers-3.16.0-4-amd64'
make[1]: Entering directory `/usr/src/linux-headers-3.16.0-4-amd64'
  CC [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/nalioctldrv.o
  CC [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/linuxnaldriver.o
  CC [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/linuxdriveros_i.o
  CC [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/linuxdriverpci_i.o
  CC [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/linuxdriverdevice_i.o
  CC [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/linuxdrivermemory_i.o
  LD [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/iqvlinux.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/iqvlinux.mod.o
  LD [M]  /usr/local/src/iqvlinux/iqvlinux/src/linux/driver/iqvlinux.ko
make[1]: Leaving directory '/usr/src/linux-headers-3.16.0-4-amd64'
make: Leaving directory '/usr/local/src/iqvlinux/iqvlinux/src/linux/driver'
Skipping removing QV driver - it does not exist...
Copying iqvlinux.ko driver file to /lib/modules directory...cp: cannot create regular file ‘/lib/modules/3.16.0-4-amd64/kernel/drivers/net/iqvlinux.ko’: Permission denied                                                                                                                                                  
Error: failed to copy driver (‘/usr/local/src/iqvlinux/iqvlinux/src/linux/driver/iqvlinux.ko’ -> ‘/lib/modules/3.16.0-4-amd64/kernel/drivers/net/iqvlinux.ko’)

手动将内核模块复制到位可以消除错误。

bootutil64e在重新刷新卡之前,这是卡的输出:

Port Network Address Location Series  WOL Flash Firmware                Version
==== =============== ======== ======= === ============================= =======
  1   001B213916B9    10:00.0 Gigabit YES PXE                           1.3.21

以下是重新刷新的会话记录。组合选项启用 PXE 和 UEFI 功能。请注意,必须使用以下FILE选项指向启动映像的位置:

root@orwell:/home/faheem# bootutil64e -up=combo -all -FILE=/usr/local/src/Intel_Network_Card_Boot_Utility/APPS/BootUtil/BootIMG.FLB

Intel(R) Ethernet Flash Firmware Utility
BootUtil version 1.6.39.1
Copyright (C) 2003-2017 Intel Corporation

Programming flash on port 1 with flash firmware image
Create restore image of NIC 1 before proceeding? (Y)es or (N)o: Y
Y

Saving flash firmware image on port 1 to file 10D34008.FLB...
Filename 10D34008.FLB already exists.
(O)verwrite/proceed or (S)top execution?: O
O
saved

Updating PXE+EFI removes PXE functionality.
Would you like to continue? (Y)es or (N)o: Y
Y
/
Flash update successful

Port Network Address Location Series  WOL Flash Firmware                Version
==== =============== ======== ======= === ============================= =======
  1   001B213916B9    10:00.0 Gigabit YES UEFI,PXE Enabled              1.5.84

相关内容