You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在UEFI菜单(如Ip4Dxe页面)实现实时时钟自动更新?

UEFI实时时钟每秒自动更新实现方案

核心结论

UEFI Runtime Services没有直接提供定时回调或每秒自动更新的API,你需要自行基于UEFI的事件机制实现触发逻辑,或者在界面主循环中主动刷新时间。

具体实现方法

1. 基于UEFI定时器事件(推荐方案)

这是UEFI环境下实现周期性任务的标准方式,步骤如下:

  • 调用gBS->CreateEvent()创建一个EVT_TIMER类型的事件,设置为EFI_TIMER_PERIODIC模式,周期参数传入10000000(UEFI时间单位为100纳秒,1秒等于10^7个单位)。
  • 为该事件绑定回调函数,在回调内执行gRT->getTime(&Time, NULL)获取最新时间,然后刷新Ip4Dxe页面的首行时钟显示。
  • 在Ip4Dxe页面的主循环中,调用gBS->WaitForEvent()处理事件队列,确保定时器事件能被及时触发。

2. 主循环轮询(简易方案)

如果定时器事件集成有困难,可在页面的主循环中主动检查时间变化:

  • 记录上一次获取到的时间秒数,每次循环调用gRT->getTime后对比当前秒数,若发生变化则更新显示。
  • 或者使用gBS->Stall(1000000)暂停1秒后再获取时间,但这种方式会阻塞界面响应,仅适合简单场景。

注意事项

  • 确认调用gRT->getTime时,Runtime Services已完成初始化(进入UEFI菜单阶段通常已满足此条件)。
  • 刷新界面时仅更新时钟所在的首行区域,避免全页重绘影响性能。
  • 时区信息可通过gRT->GetTime()的第二个参数EFI_TIME_CAPABILITIES获取,或从系统预设配置中读取时区偏移值。

内容的提问来源于stack exchange,提问作者geekycheek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:35:17