gpt4 book ai didi

c - 如何在 EFI 图形模式下使用文本?

转载 作者:太空宇宙 更新时间:2023-11-04 04:12:06 25 4
gpt4 key购买 nike

我是创建 efi 应用程序的 super 新手。我的目标是在 efi 中创建一个小应用程序,在背景上显示一些文本。但是我坚持尝试在显示器上显示文本(最好是有一个自定义字体,但在这个阶段没有必要)。我希望应用程序(也)在苹果系统上运行(从 USB 启动)

  1. 如何找到有关 EFI 函数的良好文档?似乎很难找到好的例子等。

  2. 如何使用 EFI 在背景上显示文本?

这就是我到目前为止所得到的。我使用图形协议(protocol)将背景更改为一种颜色。如何在其上显示文本。输出字符串似乎不起作用。

#include "efibind.h"
#include "efidef.h"
#include "efidevp.h"
#include "eficon.h"
#include "efiapi.h"
#include "efierr.h"
#include "efiprot.h"

static EFI_GUID GraphicsOutputProtocolGUID = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;

/**
* efi_main - The entry point for the EFI application
* @image: firmware-allocated handle that identifies the image
* @SystemTable: EFI system table
*/
EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *systemTable) {
EFI_BOOT_SERVICES *bs = systemTable->BootServices;
EFI_STATUS status;
EFI_GRAPHICS_OUTPUT_PROTOCOL *graphicsProtocol;
SIMPLE_TEXT_OUTPUT_INTERFACE *conOut = systemTable->ConOut;
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info;
UINTN SizeOfInfo, sWidth, sHeight;

status = bs->LocateProtocol(&GraphicsOutputProtocolGUID, NULL,
(void**)&graphicsProtocol);

if (EFI_ERROR(status) || graphicsProtocol == NULL) {
conOut->OutputString(conOut, L"Failed to init gfx!\r\n");
return status;
}

conOut->ClearScreen(conOut);

//Switch to current mode so gfx is started.
status = graphicsProtocol->SetMode(graphicsProtocol, graphicsProtocol->Mode->Mode);
if (EFI_ERROR(status)) {
conOut->OutputString(conOut, L"Failed to set default mode!\r\n");
return status;
}

EFI_GRAPHICS_OUTPUT_BLT_PIXEL p;
p.Red = 200;
p.Green = 77;
p.Blue = 13;
graphicsProtocol->QueryMode(graphicsProtocol, graphicsProtocol->Mode->Mode, &SizeOfInfo, &info);
sWidth = info->HorizontalResolution;
sHeight = info->VerticalResolution;
status = graphicsProtocol->Blt(graphicsProtocol, &p, EfiBltVideoFill, 0, 0, 0, 0, sWidth, sHeight, 0);


while (1) {
conOut->OutputString(conOut, L"Some text that I want to display\r\n");
bs->Stall(500000);
}



return EFI_SUCCESS;
}

最佳答案

UEFI 支持图形输出。它还支持文本输出(这可能意味着输出到串行控制台,或文本呈现到图形控制台,或两者)。但是没有明确的方式以受控方式在它们之间进行交互。

提供带有文本元素的图形环境(BIOS 配置菜单、GRUB)的应用程序通常使用它们自己的框架来使用 GRAPHICS_OUTPUT_PROTOCOL 在图形控制台上绘制文本。

关于c - 如何在 EFI 图形模式下使用文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56028607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com