UEFI EDK2 编译报找不到library class如何办?

在EDK2环境中,遇到编译时找不到LibraryClass的错误,可能是因为缺少对应包或.dsc文件配置不正确。确保[LibraryClasses]区块已定义所需库,并检查[Components]模块引用是否正确。检查包是否启用也是关键步骤。
摘要由CSDN通过智能技术生成

UEFI EDK2 编译报找不到library class如何办?

EDK2环境中,.inf用于编译一个模块,而.dsc文件用于编译一个Package,它包含了[Define]、[LibraryClasses]、[Components]重要部分。

  • [LibraryClasses]块中定义了库的名字以及库.inf文件的路径,这些库可以被[Components]块内的模块引用。
  • [Components]块,在该区块内定义的模块都会被build工具编译并生成.efi文件。
    如果出现了找不到library class,可以查看下是否 [LibraryClasses]有对应的包,或者有包的话是否打开。
UEFI BIOS 中添加子界面可以通过以下步骤完成: 1. 打开 edk2 代码文件夹,在路径 `MdeModulePkg/Universal/Setup/` 下创建一个新的目录,作为子界面的存储位置。 2. 在新创建的目录中创建一个 `Setup.inf` 文件,用来描述子界面的信息,包括名称、GUID、版本号等。 3. 在 `Setup.inf` 文件中添加以下内容: ``` [Defines] INF_VERSION = 0x00010005 BASE_NAME = MySubMenu FILE_GUID = 01234567-89AB-CDEF-0123-456789ABCDEF MODULE_TYPE = UEFI_APPLICATION VERSION_STRING = 1.0 ENTRY_POINT = MySubMenuEntryPoint UNI_FILE_LIST = MySubMenu.uni [Sources] MySubMenu.c [Packages] MdePkg/MdePkg.dec [LibraryClasses] UefiApplicationEntryPoint UefiLib ``` 其中,`BASE_NAME` 表示子界面的名称,`FILE_GUID` 表示子界面的唯一标识符,需要使用 GUID 工具生成;`ENTRY_POINT` 表示子界面的入口函数,需要在代码中实现;`UNI_FILE_LIST` 表示子界面的菜单项列表,需要在代码中创建。 4. 创建子界面的 C 代码文件 `MySubMenu.c`,并在其中实现子界面的逻辑和菜单项列表。例如: ``` #include <Uefi.h> #include <Guid/MdeModuleHii.h> #include <Library/UefiLib.h> #include <Library/UefiBootServicesTableLib.h> #include <Library/MemoryAllocationLib.h> #include <Library/HiiLib.h> EFI_STATUS EFIAPI MySubMenuEntryPoint(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable) { EFI_STATUS Status; EFI_HII_HANDLE HiiHandle; EFI_STRING_ID MySubMenuTitle; EFI_GUID MySubMenuGuid = {0x01234567, 0x89ab, 0xcdef, {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}}; // Create HII handle Status = HiiInitializeProtocol(); if (EFI_ERROR(Status)) { return Status; } // Add menu title MySubMenuTitle = HiiSetString(HiiHandle, 0, L"My Sub Menu Title", NULL); if (MySubMenuTitle == 0) { return EFI_OUT_OF_RESOURCES; } // Add menu items HiiCreateAction(HiiHandle, 0, MySubMenuTitle, 0, 0, 0, NULL, NULL); HiiCreateAction(HiiHandle, 0, MySubMenuTitle, 1, 0, 0, NULL, NULL); HiiCreateAction(HiiHandle, 0, MySubMenuTitle, 2, 0, 0, NULL, NULL); return EFI_SUCCESS; } ``` 其中,`HiiInitializeProtocol()` 用来初始化 HII 协议;`HiiSetString()` 用来添加菜单标题;`HiiCreateAction()` 用来添加菜单项。 5. 创建子界面的菜单项列表 `MySubMenu.uni`,并在其中定义菜单项的名称和描述。例如: ``` # LANGUAGE en-US MySubMenuTitle = "My Sub Menu Title"; MySubMenuItem1 = "My Sub Menu Item 1"; MySubMenuItem2 = "My Sub Menu Item 2"; MySubMenuItem3 = "My Sub Menu Item 3"; ``` 6. 重新编译 edk2 代码,生成新的 UEFI BIOS 镜像文件,子界面将会出现在 UEFI Setup 菜单中。 需要注意的是,子界面的菜单项名称和描述需要根据实际需要进行修改,同时需要保证子界面的 GUID 和菜单项的 ID 是唯一的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值