pei和dxe之间通过hob传递参数

    xiaoxiao2021-03-25  51

    在PEI和DXE之间通过HOB 传递参数。例如从VOID EFIAPI DxeMain (   IN  VOID *HobStart ) 的入口函数也可以看到输入参数只有一个,这个参数是在PEI阶段准备好的。 拿到HOB 后就可以按照下面的code从HOB中拿到PEI传递过来的数据   VectorInfoList = NULL;   GuidHob = GetNextGuidHob (&gEfiVectorHandoffInfoPpiGuid, HobStart);   if (GuidHob != NULL) {     VectorInfoList = (EFI_VECTOR_HANDOFF_INFO *) (GET_GUID_HOB_DATA(GuidHob));   } 调用GetNextGuidHob 来找从HobStart 开始第一个匹配gEfiVectorHandoffInfoPpiGuid的GuidHob。 VOID * EFIAPI GetNextGuidHob (   IN CONST EFI_GUID         *Guid,   IN CONST VOID             *HobStart   ) {   EFI_PEI_HOB_POINTERS  GuidHob;   GuidHob.Raw = (UINT8 *) HobStart;   while ((GuidHob.Raw = GetNextHob (EFI_HOB_TYPE_GUID_EXTENSION, GuidHob.Raw)) != NULL) {     if (CompareGuid (Guid, &GuidHob.Guid->Name)) {       break;     }     GuidHob.Raw = GET_NEXT_HOB (GuidHob);   }   return GuidHob.Raw; } 可见会遍历整个GuidHob.Raw,如果找到guid的name等于gEfiVectorHandoffInfoPpiGuid 就停止,然后返回 GuidHob.Raw。 然后通过 #define GET_GUID_HOB_DATA(HobStart) \   (VOID *)(*(UINT8 **)&(HobStart) + sizeof (EFI_HOB_GUID_TYPE)) 就可以拿到想要的gEfiVectorHandoffInfoPpiGuid
    转载请注明原文地址: https://ju.6miu.com/read-38769.html

    最新回复(0)