高通UEFI研究[八]

LOGO显示调用记录
1、注册显示事件,这个地方会收到信号后会显示logo,目前还没找到是在哪个地方发送事件的。
boot_images/QcomPkg/Drivers/EnvDxe/EnvDxe.c
EFI_STATUS
RegisterSplashScreenRendering (VOID)
{
EFI_STATUS Status;

Status = gBS->CreateEventEx (EVT_NOTIFY_SIGNAL,
TPL_CALLBACK,
SplashScreenRenderCallback,
NULL,
&gDisplaySetModeSignalGuid,
&GraphicsProtocolNotificationEvent);

ASSERT_EFI_ERROR (Status);

return Status;

}
回调函数
VOID SplashScreenRenderCallback (
IN EFI_EVENT Event,
IN VOID *Context
)
{
EFI_STATUS Status = EFI_SUCCESS;
EFI_QCOM_DISPLAY_UTILS_PROTOCOL *pDisplayUtilsProtocol = NULL;
EFI_DISPLAY_UTILS_RENDERLOGO_CONFIG RenderLogoCfg = {0};

/* Render the splash logo /
Status = gBS->LocateProtocol(&gQcomDisplayUtilsProtocolGuid, NULL, (void
*)&pDisplayUtilsProtocol);
if ((EFI_SUCCESS != Status) || (NULL == pDisplayUtilsProtocol))
{
DEBUG((EFI_D_WARN, “EnvDxe locate display utils protocol failed with status: %r\n”, Status));
}
else
{
RenderLogoCfg.uFlags |= DISPLAY_UTILS_RENDERLOGO_RENDER_SPLASH_SCREEN;
if (EFI_SUCCESS != (Status = pDisplayUtilsProtocol->DisplayUtilsRenderLogo(&RenderLogoCfg)))
{
DEBUG((EFI_D_WARN, “EnvDxe render splash screen failed with status: %r\r\n”, Status));
}
}
}

2、Load, process and display OEM logo bitmaps including processing needed to
EFI_STATUS
EFIAPI
Display_Utils_RenderSplashScreen(
OUT VOID *BGRTTable OPTIONAL,
RenderLogoParamsType *pRenderLogoParams)

3、从main FV读取logo_custom.bmp到buffer
Display_Utils_LoadFile(pLogoFileName, &BGRTAddress, &BGRTBufferSize, &ImageSize, uFlags);

4、Display_Utils_RenderBGRTImage(BGRTAddress, ImageSize, pRenderLogoParams)//渲染Logo
4.1 DisplayDxe_Blt 函数的主要作用就是拷贝图片数据到 framebuffer中,数据为RGB格式,这样就能直接显示出来了
GraphicsOutput->Blt(GraphicsOutput,
(EFI_GRAPHICS_OUTPUT_BLT_PIXEL*)&bgPixel,
EfiBltVideoFill,
0, 0,
0, 0,
GraphicsOutput->Mode->Info->HorizontalResolution,
GraphicsOutput->Mode->Info->VerticalResolution,
0);

4.2 Blt里面调用DisplayDxeBltInternal,将图像数据直接复制到pSrcBuffer = (UINT8*)DISPLAYDXE_PHYSICALADDRESS32(gDxeModeInfo.sProtocolInfo.FrameBufferBase);图像就会显示到屏幕上了(未验证)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值