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

UEFI应用定时器回调仅在AMI BIOS中挂死问题排查求助

UEFI定时器回调在X64实体机AMI BIOS中挂死问题

问题概述

将UEFI应用从AARCH64移植到X64平台时,出现周期性定时器启用后应用挂死的异常:定时器回调执行完毕后,后续代码完全停止运行。调试未发现代码逻辑错误,提供的极简HelloWorld示例在AARCH64设备、X64 QEMU中运行正常,但在多款搭载AMI BIOS的X64实体机(技嘉AM2、微星LGA1200、华硕LGA1700主板)中均触发挂死。

复现环境

  • 编译环境:Ubuntu 20 + GCC 9.4.0,严格遵循EDK2规范编译
  • 运行环境:
    • 异常环境:技嘉AM2、微星LGA1200、华硕LGA1700主板的AMI BIOS
    • 正常环境:AARCH64设备、X64 QEMU
  • 编译优化:EDK2默认优化为-Os,需较复杂代码才能触发问题,因此示例中函数显式指定-O0优化

现象细节

  • 示例仅在定时器回调中修改两个静态数组的单个字节,首次回调执行后应用立即挂死
  • 预期行为:持续输出Hello World、timer begin、timer end
  • 实际表现:仅输出少量Hello World及一次回调日志后,程序完全停止响应
  • 规避现象:移除部分代码(如仅使用一个数组、将函数改为内联)后,挂死问题不再出现

完整示例代码

#include <Library/UefiApplicationEntryPoint.h>
#include <Library/UefiLib.h>
#include <Library/DebugLib.h>
#include <Library/UefiBootServicesTableLib.h>

static volatile UINT8 test_buf1[200];
static volatile UINT8 test_buf2[200];
void* timer;

__attribute((optimize("O0")))
void assign(volatile UINT8* ptr, int ind)
{
    ptr[ind] = 10;
}

__attribute((optimize("O0")))
void test_func(void)
{
    assign(test_buf1, 0);
    assign(test_buf2, 0);
}

__attribute((optimize("O0")))
void test_interrupt(EFI_EVENT Event, VOID *Context) 
{
    DEBUG ((EFI_D_ERROR, "timer begin\r\n"));
    test_func();
    DEBUG ((EFI_D_ERROR, "timer end\r\n"));
}

EFI_STATUS
EFIAPI
UefiMain (
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  )
{
  EFI_STATUS  Status;

  Print(L"Hello World\n"); 

  Status = gBS->CreateEvent( EVT_TIMER | EVT_NOTIFY_SIGNAL, TPL_CALLBACK, (EFI_EVENT_NOTIFY)test_interrupt, NULL, &timer);
    if (EFI_ERROR(Status)) {
        return -1;
    }

    Status = gBS->SetTimer( timer, TimerPeriodic, EFI_TIMER_PERIOD_MILLISECONDS (16));
    if (EFI_ERROR(Status)) {
        return -1;
    }

  while(1)
    Print(L"Hello World\n"); 

  return EFI_SUCCESS;
}

疑问

请问该问题是现代AMI BIOS存在严重缺陷,还是代码本身存在未被发现的问题?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:43:13