我想将驱动程序包含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
:这个依赖于RNDR
ARM 内核的指令支持(FEAT_RNG
)。由于我的平台不支持此指令,看来我唯一的选择是第一个。
但是,DxeRngLib.inf
lib 依赖于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
我对模块/库的使用有什么问题吗?有没有办法解决这个问题?
谢谢!