Date
1 - 4 of 4
Is it possible to manually (from code) load 'Realtek UEFI UNDI Driver' from firmware?
Michael Brown
On 07/05/2021 13:08, Laszlo Ersek wrote:
On 05/07/21 09:13, alexey3nemckovich@... wrote:There is also the possibility that the "fast boot" option is implemented by having the Realtek UEFI UNDI Driver itself check for the "fast boot" setting, and refusing to be loaded (i.e. returning an error from the entry point) if fast boot is enabled. I've seen some vendor drivers using that kind of hack.I am developing efi application that should work with network.That will only load drivers that are part of the platform firmware. It Michael |
|
Sean
The uefi spec defined method to request the bds connect something is using https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Protocol/BootManagerPolicy.h
We have been trying to move partners away from hacky solutions and to this method. Thanks Sean Get Outlook for iOS<https://aka.ms/o0ukef> ________________________________ From: discuss@edk2.groups.io <discuss@edk2.groups.io> on behalf of Laszlo Ersek <lersek@...> Sent: Friday, May 7, 2021 9:08:17 PM To: discuss@edk2.groups.io <discuss@edk2.groups.io>; alexey3nemckovich@... <alexey3nemckovich@...> Subject: Re: [edk2-discuss] Is it possible to manually (from code) load 'Realtek UEFI UNDI Driver' from firmware? On 05/07/21 09:13, alexey3nemckovich@... wrote: I am developing efi application that should work with network.That will only load drivers that are part of the platform firmware. It will not load drivers from the disk (which could otherwise be loaded via Driver#### options), or from the ROM BARs of PCI cards. (The PCI bus driver installs EFI_LOAD_FILE2_PROTOCOL on the handle that carries EFI_PCI_IO_PROTOCOL too, for exposing the UEFI driver.) See also EFI_PCI_IO_PROTOCOL.{RomSize,RomImage}. ... TBH I'm doubtful a UEFI application is supposed to load option ROM drivers. That's the job of platform BDS. If "fast boot" is selected, then the system seems to work as intended -- I'm doubtful that running your application qualifies as "fast boot" either. I'd suggest disabling fast boot in the first place. Laszlo |
|
Laszlo Ersek
On 05/07/21 09:13, alexey3nemckovich@... wrote:
I am developing efi application that should work with network.That will only load drivers that are part of the platform firmware. It will not load drivers from the disk (which could otherwise be loaded via Driver#### options), or from the ROM BARs of PCI cards. (The PCI bus driver installs EFI_LOAD_FILE2_PROTOCOL on the handle that carries EFI_PCI_IO_PROTOCOL too, for exposing the UEFI driver.) See also EFI_PCI_IO_PROTOCOL.{RomSize,RomImage}. ... TBH I'm doubtful a UEFI application is supposed to load option ROM drivers. That's the job of platform BDS. If "fast boot" is selected, then the system seems to work as intended -- I'm doubtful that running your application qualifies as "fast boot" either. I'd suggest disabling fast boot in the first place. Laszlo |
|
alexey3nemckovich@...
I am developing efi application that should work with network.
I found, that some drivers (including 'Realtek UEFI UNDI Driver') are not loaded, when BIOS option 'Fast boot' is on. I'v tried to load it using EFI_FIRMWARE_VOLUME2_PROTOCOL, enumerating files of type EFI_FV_FILETYPE_DRIVER and loading them, in such way Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiFirmwareVolumeProtocolGuid, NULL, &NoHandles, &Buffer); if (!EFI_ERROR(Status)) { for (Index = 0; Index < NoHandles; Index++) { Status = gBS->HandleProtocol(Buffer[Index], &gEfiFirmwareVolumeProtocolGuid, (VOID **)&Fv); if (!EFI_ERROR(Status)) { for (Index2 = 0; Index2 < sizeof(FileTypes)/sizeof(EFI_FV_FILETYPE); Index2++) { FileType = FileTypes[Index2]; Key = AllocatePool(Fv->KeySize); ASSERT(Key != NULL); ZeroMem(Key, Fv->KeySize); Index3 = 0; do { NextStatus = Fv->GetNextFile(Fv, Key, &FileType, &NameGuid, &Attributes, &Size); if (EFI_SUCCESS == NextStatus/* && Index3 < 50*/) { Print(L"1\n"); UiSection = NULL; Status = Fv->ReadSection( Fv, &NameGuid, EFI_SECTION_USER_INTERFACE, 0, (VOID **)&UiSection, &Size, &Authentication ); Print(L"3\n"); if (!EFI_ERROR(Status)) { Print(L"4\n"); Print(L"%d) Found driver image '%s'\n", Index3, UiSection); EFI_DEVICE_PATH_PROTOCOL *DevicePath; EFI_HANDLE ImageHandle; DevicePath = FvFileDevicePath(Buffer[Index], &NameGuid); Status = gBS->LoadImage(FALSE, gImageHandle, DevicePath, NULL, 0, &ImageHandle); if (!EFI_ERROR(Status)) { //PERF_END(NULL, "BDS", NULL, 0); Print(L"%d) Load image success '%s'\n", Index3, UiSection); Status = gBS->StartImage(ImageHandle, NULL, NULL); Some drivers were loaded, but there was not 'Realtek UEFI UNDI Driver' among them. Maybe somebody knows from where I can load this UNDI driver? |
|