UEFI——Event(事件)简单使用

一、Event的定义与概念

在UEFI中所有的异步操作都要通过事件(Event)来实现。事件通常用于通知某个事件的发生,例如设备插入、硬件错误、系统启动等等。UEFI事件可以被不同组件监听,并根据事件类型执行相应的操作。

事件服务由EFI_BOOT_SERVICES提供,启动服务为开发者提供了一些函数,用于操作事件、定时器以及TPL(任务优先级),这些函数可以分为三类:事件相关函数、定时器相关函数及TPL相关函数。

事件可以处于signaled状态,表示事件已经被触发或通知,或者是事件等待处理。事件不处于signaled状态,表示事件尚未触发或通知。

函数介绍:

CreateEvent() 用于产生一个事件,其函数原型为:

/**
  Creates an event.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_CREATE_EVENT)(
  IN  UINT32                       Type, //要创建的事件类型及其模式和属性。
  IN  EFI_TPL                      NotifyTpl, //TPL, 事件的优先级
  IN  EFI_EVENT_NOTIFY             NotifyFunction OPTIONAL, //指向事件通知函数的指针,如果有的话
  IN  VOID                         *NotifyContext OPTIONAL, //通知函数上下文的指针
  OUT EFI_EVENT                    *Event //输出参数,指向新产生的事件
  );

 Type:事件的模式和属性,可以利用#define来定义事件的类型和模式,例如:

//事件的类型和模式,可以通过按位或组合

#define EVT_TIMER          0x80000000 //表示是一个定时器事件
#define EVT_RUNTIME        0x40000000 //表示是一个运行时事件
#define EVT_NOTIFY_WAIT    0x00000100 //表示是一个等待事件,用于操作系统中等待事件的产生
#define EVT_NOTIFY_SIGNAL  0x00000200 //表示这是一个信号事件,用于通知事件的发生

#define EVT_SIGNAL_EXIT_BOOT_SERVICES      0x00000201 //退出启动服务的事件,通知UEFI固件即将退出启动服务
#define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE  0x60000202 //虚拟地址改变的事件,用于UEFI固件正在改变虚拟地址的通知

NotifyTpl: 事件的优先级

// Task priority level
//
#define TPL_APPLICATION  4 //应用程序级的事件,优先级相对较低
#define TPL_CALLBACK     8 //回调事件,其他组件完成某个操作后触发
#define TPL_NOTIFY       16 //通知事件
#define TPL_HIGH_LEVEL   31 //高优先级事件,用于紧急情况或关键操作

 NotifyFunction OPTIONAL:调用一个通知事件(如果有的话),其原型为

/**
  Invoke a notification event
  调用一个通知事件

  @param[in]  Event                 Even
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值