未加载 Realtek UEFI UNDI 驱动程序

Realtek UEFI UNDI Driver not loaded

我正在开发应该与网络一起工作的 efi 应用程序。 为了方便起见,我将 EFI\Boot\bootx64.efi 文件更改为 efi shell 以使系统启动时默认启动 efi shell。 当 shell 启动时,我 运行 命令 ifconfig -l 查看可用的网络接口设置。

我遇到了以下行为。

当系统默认启动我的 shell (EFI\Boot\bootx64.efi) 时,我没有看到任何网络接口,运行ning 命令 ifconfig -l。但。 如果我使用(在 HP 笔记本电脑上测试)“从文件启动 menu/boot”手动启动相同的文件 (EFI\Boot\bootx64.efi),shell 启动并且 ifconfig -l 显示网络接口 eth0.

因此,使用默认系统启动或从启动菜单手动加载相同的 efi 文件会给我不同的网络可用性结果。

我决定比较两种情况下加载的驱动程序列表。 我注意到,当系统以默认模式启动时(不是通过从启动菜单手动指定设备)驱动程序 Realtek UEFI UNDI Driver 不存在。当我从文件 (EFI\Boot\bootx64.efi) 手动启动时,它已加载。

我认为没有这个驱动'Realtek UEFI UNDI Driver'是原因。为了检查这一点,我做了以下测试:

  1. 从网络下载Realtek UNDI驱动(RtkUndiDxe.efi)
  2. 已将其复制到 efi 引导文件夹 (EFI\Boot\)
  3. 系统默认启动进入shell并通过命令load 'RtkUndiDxe.efi手动加载Realter UNDI驱动程序 结果,出现了网络接口。

谁能解释一下,为什么默认系统启动时 Realtek UEFI UNDI Driver 没有加载?或者我如何让系统从我自己的 efi app/driver?

加载它自己的 Realtek UEFI UNDI Driver

某些驱动程序未加载到 BIOS 的 “快速启动” 选项中。当我关闭它时,现在加载了网络驱动程序和其他一些。

但您也可以使用 EFI 固件卷 2 协议,即使您自己打开了 “快速启动” 选项,也可以加载所需的驱动程序正如 MiSimon 在对我的问题的评论中所说。

You can use the LoadImage and StartImage functions inside EFI_BOOT_SERVICE (gBS). You must provide the correct device path to the LoadImage function, you have to search the correct firmware file first using the EFI_FIRMWARE_VOLUME2_PROTOCOL protocol.

下面是代码示例(没有错误处理和其他东西),它枚举固件驱动程序文件并将它们加载到内存中。

... Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiFirmwareVolume2ProtocolGuid, NULL, &NoFvHandles, &FvHandleList);
... Status = gBS->HandleProtocol(FvHandleList[Index], &gEfiFirmwareVolume2ProtocolGuid, (VOID **)&Fv); 
... NextStatus = Fv->GetNextFile(Fv, Key, &FileType, &NameGuid, &Attributes, &FileSize); 
... Status = Fv->ReadSection(Fv, &NameGuid, EFI_SECTION_USER_INTERFACE ...
... DevicePath = FvFileDevicePath(FvHandleList[Index], &NameGuid); 
... Status = gBS->LoadImage(FALSE, gImageHandle, DevicePath, NULL, 0, &ImageHandle); 
... Status = gBS->StartImage(ImageHandle ...