UEFI 基础教程 (九) - EVENT 简单使用

UEFI 基础教程 (八) - EVENT 简单使用

一、 编写源代码
  1. 编写UEFI Application
    代码C:\edkii\OvmfPkg\MyHelloWorldEvent\MyHelloWorldEvent.c,
EFI_STATUS MyHelloWorldEventEntry(
        IN EFI_HANDLE           ImageHandle,
        IN EFI_SYSTEM_TABLE     *SystemTable
        )
{
    EFI_STATUS Status;

    UINTN        Index=0;
    EFI_INPUT_KEY      Key;
    EFI_EVENT myEvents[2] = {0};
    

    Print (L"[MyHelloWorldEvent] MyHelloWorldEventEntry Start..\n");
    // 1. 生成事件
    // 生成按键事件
    myEvents[0] = gST->ConIn->WaitForKey;
     

    
    // 生成Timer事件
    Status = gBS->CreateEvent(EVT_TIMER , TPL_CALLBACK, (EFI_EVENT_NOTIFY)NULL, (VOID*)NULL, &myEvents[1]);
    if(EFI_ERROR(Status)){
      Print (L"[MyHelloWorldEvent] CreateEvent %r ...\n",Status);
      return Status;
    }
    
    Status = gBS->SetTimer(myEvents[1],TimerPeriodic , 100 * 1000 * 1000);//设置10秒定时
    if(EFI_ERROR(Status)){
      Print (L"[MyHelloWorldEvent] SetTimer %r ...\n",Status);
      return Status;
    }
    
    while (1){
        //2. 阻塞并等待事件被触发
        Status = gBS->WaitForEvent(2, myEvents, &Index);
        if(EFI_ERROR(Status)){
          Print (L"[MyHelloWorldEvent] WaitForEvent %r ...\n",Status);
          return Status;
        }
    
        if (Index == 0){
            // 读取按键键值并显示
            Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key); 
            switch (Key.ScanCode){
              case SCAN_UP:
                Print (L"[MyHelloWorldEvent]  Key UP is Pressed..\n");
                break;
           
              case SCAN_DOWN:
                Print (L"[MyHelloWorldEvent]  Key Down is Pressed..\n");
                break;
              
              ...
                
              case SCAN_ESC:
                Print (L"[MyHelloWorldEvent]  Key ESC is Pressed..\n");
                goto End;
                
              default:
                Print (L"[MyHelloWorldEvent] Key %a is Pressed..\n",(CHAR8 *)&Key.UnicodeChar);
                break;
            }
        }else{
            Print (L"[MyHelloWorldEvent]  Timer event is trigered ..\n");
        }
    }
    
End:
    //销毁事件
    Status = gBS->CloseEvent(myEvents[0]);
    Status = gBS->CloseEvent(myEvents[1]);
      
    Print (L"[MyHelloWorldEvent] MyHelloWorldEventEntry End..\n");
    return Status;
}
二、 编译生成EFI文件

运行edksetup.bat编译整个OvmfPkg Package

三、 运行 UEFI APP MyHelloWorldEvent.efi
  1. 拷贝 C:\edkii\Build\OvmfX64\DEBUG_VS2013x86\FV\OVMF.fdC:\qemu;拷贝C:\edkii\Build\OvmfX64\DEBUG_VS2013x86\X64\OvmfPkg\MyHelloWorldEvent\MyHelloWorldEvent\OUTPUT\MyHelloWorldEvent.efi 到 虚拟盘HDD_BOOT.img
  2. 执行setup-qemu-x64.bat| findstr MyHelloWorldEvent , 然后在UEFI SHELL 中执行 MyHelloWorldEvent.efi,结果如下,
    在这里插入图片描述
四、 小结

Events 是UEFI Service管理的另一个类型对像,可以提供一种异步机制来支持有限多任务,包括键盘、鼠标、定时器、Protocol等。本文利用使用Event部分API实现了对按键和定时器事件的监听,并做出简单处理。其中,CreateEvent用来生成事件,WaitForEvent用来阻塞等待事件被触发,CloseEvent用来销毁事件。

Event DEMO源码

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: UEFI BIOS Utility-EZ Mode是一种简单易用的BIOS设置界面,它提供了基本的系统信息、启动选项、调整CPU和内存频率、设置风扇控制等功能。它的设计使得用户可以轻松地进行基本的BIOS设置,而不需要深入了解BIOS的复杂性。 ### 回答2: UEFI BIOS Utility - EZ Mode是一种UEFI BIOS配置工具,它旨在使用户可以轻松管理和调整基本系统设置。EZ Mode提供了一个简化的图形用户界面面板,使用户能够快速而准确地调整各种BIOS选项。 EZ Mode界面以图形化方式呈现各种设置和参数,这使得用户可以更轻松地了解它们的含义和作用。例如,在EZ Mode中,用户可以快速地查看CPU速度、内存用量、系统温度、风扇转速等参数,并进行必要的调整以改善系统的性能和稳定性。 除了常规的设置,EZ Mode还提供了一些高级功能。例如,用户可以选择开启或关闭诸如Intel快速启动技术、USB 3.0支持、SATA控制器等功能,以最大程度地优化系统性能。 此外,EZ Mode还支持自动检测并更新BIOS固件,这可以保证系统始终运行在最新的稳定版本中。 总之,UEFI BIOS Utility - EZ Mode 是一个非常有用和功能强大的BIOS配置工具,它使用户在处理系统设置和参数时更加轻松。无论是普通用户还是高级用户,都可以从EZ Mode的功能中受益。 ### 回答3: UEFI BIOS Utility是现代计算机使用的一种新型Firmware。UEFI位于操作系统和硬件之间,主要负责计算机启动过程中的硬件自检以及操作系统的加载过程。UEFI BIOS Utility的EZ模式是一种简化操作的模式,旨在提供用户一个更加直观的界面,以便用户轻松地对计算机进行配置。 UEFI BIOS Utility的EZ模式提供了一个清晰的界面,可以让用户更加直观地了解计算机的硬件配置,系统信息以及启动选项等。在这种模式下,用户可以很方便地进行一些常见的设置,例如修改系统时间,设置启动顺序等等。同时,EZ模式还提供了导航面板,让用户轻松地找到需要的选项。 一些重要的系统配置也可以在EZ模式下进行调整。例如,用户可以配置CPU的频率和电压,设置内存检测参数等等。此外,用户还可以对硬盘进行分区,修改RAID设置和SATA模式等。 总之,UEFI BIOS Utility的EZ模式提供了一个真正的易用界面,让用户轻松处理大量的系统配置和硬件设置。当您需要进行系统调整的时候,把您的注意力放在EZ模式中,就不需要担心在BIOS中迷路了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值