Step to UEFI (21) ----- 清屏

想实现一个清屏的功能,刚开始在CLIB中翻了半天没找到,用工具直接搜索了一下 clrscr (应该在 conio.h 中)压根儿没找到。估计是 CLIB没有支持,只好换个方法。想起来Syetem Table中有 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL 拿着SPEC翻了【参考1】一下,发现可以使用它的 ClearScreen 函数。

ClearScreen

写一个简单的程序验证之:

//
// ClearScreen
//
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/ShellLib.h>
#include <Library/UefiApplicationEntryPoint.h>

extern EFI_BOOT_SERVICES             	 *gBS;
extern EFI_SYSTEM_TABLE			 *gST;
extern EFI_RUNTIME_SERVICES 		 *gRT;

//
// Entry point function 
//
EFI_STATUS
UefiMain (
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  )
{
   INTN	i;

  for (i=0;i<1000;i++)
    {
	Print(L".");
    }
  Print(L".\n");

  gST -> ConOut -> SetAttribute(gST->ConOut,0x1);
  gST -> ConOut -> ClearScreen(gST->ConOut);
 
  //SystemTable ->ConOut ->ClearScreen(SystemTable ->ConOut);
  //Print(L"%lX\n",SystemTable ->ConOut ->ClearScreen);
  //Print(L"%lX\n",gST -> ConOut -> ClearScreen);
  //Print(L"%lX\n",gST->ConOut);
  return EFI_SUCCESS;
}

 

工作正常,能够清屏。

程序下载 ClsTest

参考:

1.UEFI Spec 2.4 P459

2.http://biosren.com/viewthread.php?tid=3050&highlight=clearscreen 关于SHELL下面修改(前)背景色

发表评论

电子邮件地址不会被公开。 必填项已用*标注