UEFI locat Block io PPI

  EFI_STATUS                    Status    = EFI_SUCCESS;
  EFI_PEI_RECOVERY_BLOCK_IO_PPI *BlockPPi = NULL;
  DEBUG ((EFI_D_ERROR, "[PPI]\n"));
  Status = PeiServicesLocatePpi (
           &gEfiPeiVirtualBlockIoPpiGuid,
           0,
           NULL,
           (VOID **)&BlockPPi
           );
  if (EFI_ERROR(Status)){
      DEBUG ((EFI_D_ERROR, "[PPI] Fail\n"));
      return Status;
  }

为什么这样去找blockIO的ppi会失败?

这段代码是在使用PEI阶段(Pre-EFI Initialization)去找EFI_PEI_RECOVERY_BLOCK_IO_PPI类型的PPI接口。其中gEfiPeiVirtualBlockIoPpiGuid是PPI接口的GUID。

这样的话,如果找不到该PPI接口,会返回EFI_NOT_FOUND错误。这可能是因为在PEI阶段还没有加载该PPI接口,或者是因为在PEI阶段该PPI接口并不存在。

可能的原因有:
1.在系统启动阶段没有加载该PPI接口,或者是加载顺序问题导致的,可以尝试更改加载顺序,或者在系统启动时手动加载该PPI接口。
2.在项目中没有实现该PPI接口,需要添加实现该PPI接口的代码。
3.在系统中没有安装硬盘驱动,导致该PPI接口无法正常工作。

推荐使用EFI_PEI_RECOVERY_BLOCK_IO_PPI *BlockPPi = NULL; 代码来查看是否能够找到该接口,如果能够找到,则查看是否实现了该接口。