0

我想将驱动程序包含edk2/SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.inf在我的 AArch64 平台的固件中。如图RngDxe.inf所示,它依赖于 class 的库实例,RngLib似乎 edk2 存储库中有两个通用实例可用:

  • RngLib|MdePkg/Library/DxeRngLib/DxeRngLib.inf:这个使用 CPU 来生成 RNG。
  • RngLib|MdePkg/Library/BaseRngLib/BaseRngLib.inf:这个依赖于RNDRARM 内核的指令支持(FEAT_RNG)。由于我的平台不支持此指令,看来我唯一的选择是第一个。

但是,DxeRngLib.inflib 依赖于gEfiRngProtocolGuid,它将由要构建的驱动程序安装。似乎这是一个循环依赖。

以下是模块构建报告的摘录RngDxe

8264 Final Dependency Expression (DEPEX) Instructions
8265   PUSH gEfiPcdProtocolGuid
8266   PUSH gEfiRngProtocolGuid
8267   AND
8268   END
8269 -----------------------------------------------------------------------------------------------     -------------------------
8270 Dependency Expression (DEPEX) from INF
8271 (TRUE) AND (gEfiPcdProtocolGuid) AND (gEfiRngProtocolGuid)
8272 -----------------------------------------------------------------------------------------------     -------------------------
8273 From Module INF:  TRUE
8274 From Library INF: (gEfiPcdProtocolGuid) AND (gEfiRngProtocolGuid)

以下是在我的平台(FPGA)上执行时的日志(带注释):

Evaluate DXE DEPEX for FFS(B981A835-6EE8-4F4C-AE0B-210AA0BFBF01)  <= RngDxe.efi, which insalls gEfiPngProdocolGuid
  PUSH GUID(13A3F0F6-264A-3EF0-F2E0-DEC512342F34) = TRUE          <= gEfiPcdProtocolGuid
  PUSH GUID(3152BCA5-EADE-433D-862E-C01CDC291F44) = FALSE         <= gEfiPngProtocolGuid
  AND
  END
  RESULT = FALSE

我对模块/库的使用有什么问题吗?有没有办法解决这个问题?

谢谢!

4

0 回答 0