执行OS 上电过程,长按电源按钮强制关机,然后bmc 下发上电会延时5分钟

// 此模板仅供参考,如果不适用可以修改

问题描述

1.昇腾Atlas 800T A3 机型下执行OS 上电过程中,长按电源按钮强制关机,然后BMC 再下发上电。尽管这5分钟内发送多次上电,都不响应。5分钟后才响应上电动作。

环境信息

  • 操作系统:麒麟

  • 软件版本:openubmc 2512LTS SP1

  • 硬件配置:920B 32G Hynix 内存

重现步骤

  1. 先下电关机服务器OS

  2. BMC 下发服务OS 上电指令

  3. OS 上电过程中执行长按电源按钮关机

  4. BMC下发服务器OS上电指令,或者直接短按电源按钮,服务器OS 没响应,5分钟后才响应

期望结果

以上步骤4执行OS 上电可马上上电

实际结果

实际需要等一个健康服务deassert , 5分钟后才能上电

分析结论

查看fructrl 好像有个5分钟 bios flash 校验,这个是设计逻辑?还是为了防止什么作用吗。

日志如下:
2: 2026-06-18 06:04:50.197393 fructrl NOTICE: button_evt.lua(225): clear power button event
11: 2026-06-18 06:04:51.724715 fructrl NOTICE: button_evt.lua(225): clear power button event
18: 2026-06-18 06:04:52.224244 fructrl NOTICE: button_evt.lua(245): power button event change to [0]
50: 2026-06-18 06:05:25.861152 fructrl NOTICE: fructrl_obj_mgnt.lua(279): [System:1]call PowerCtrl method, PowerCtrlType=On, RestartCause=ChassisControlCommand, FruID=0.
51: 2026-06-18 06:05:25.861576 fructrl NOTICE: fructrl_obj_mgnt.lua(41): host 1 call power ctrl, ctrl_type=On, reason=ChassisControlCommand, fruid=0
52: 2026-06-18 06:05:25.862896 fructrl NOTICE: powerapi.lua(193): [System:1]PowerCtrl is called by bmc.kepler.web_backend
53: 2026-06-18 06:05:25.863409 fructrl NOTICE: powerapi.lua(197): [System:1]pctrl_type=On, restart_cause=ChassisControlCommand, fruid=0
54: 2026-06-18 06:05:25.868579 fructrl NOTICE: pwr_cycle.lua(39): [System:1]cycle interrupt flag is set to true!
55: 2026-06-18 06:05:25.869131 fructrl NOTICE: ctrl_state.lua(61): [System:1]From NoAction to Oning.
56: 2026-06-18 06:05:25.872924 fructrl NOTICE: powerapi.lua(224): CurrentRestartType=0
57: 2026-06-18 06:05:25.896097 fructrl NOTICE: therm_trip.lua(73): [System:1]Start to clear therm trip…
58: 2026-06-18 06:05:26.020093 fructrl NOTICE: record_fault.lua(33): [System:1]Start to clear record fault…
59: 2026-06-18 06:05:26.078177 fructrl NOTICE: fructrl.lua(78): [System:1]wait PwrOnLocked unlock…
60: 2026-06-18 06:05:26.078954 fructrl NOTICE: fructrl.lua(85): [System:1]Quit wait_pwronlocked_unlock already.
61: 2026-06-18 06:05:26.080235 fructrl NOTICE: fructrl.lua(109): [System:1]Send pre-poweron broadcast after all locks are unlocked.
63: 2026-06-18 06:05:26.100855 fructrl NOTICE: pwr_lock.lua(60): [System:nil][bios]Add power on lock to lock_table successfully.
64: 2026-06-18 06:05:26.099797 fructrl NOTICE: fructrl_obj_mgnt.lua(288): [System:1]set poweron lock, pwronlocked=true, timeout=3000, appname=bios, reason=VerifyFlash
65: 2026-06-18 06:05:26.195246 fructrl NOTICE: button_evt.lua(196): execute pwr button lock, val=(1)
66: 2026-06-18 06:05:26.195851 fructrl NOTICE: button_evt.lua(74): The panel button is sheild again due to the soft power on lock
68: 2026-06-18 06:05:27.041419 fructrl NOTICE: pwr_lock.lua(84): [System:nil]Update power on lock item successfully, appname=(bios), reason=(VerifyFlash), locked=(false), timeout=(3000)
69: 2026-06-18 06:05:27.040886 fructrl NOTICE: fructrl_obj_mgnt.lua(288): [System:1]set poweron lock, pwronlocked=false, timeout=3000, appname=bios, reason=VerifyFlash
70: 2026-06-18 06:05:27.199139 fructrl NOTICE: pwr_lock.lua(156): [System:nil]Delete power on lock item, appname=(bios), reason=(VerifyFlash)
71: 2026-06-18 06:05:27.296682 fructrl NOTICE: button_evt.lua(196): execute pwr button lock, val=(0)
72: 2026-06-18 06:05:27.297187 fructrl NOTICE: button_evt.lua(74): The panel button is unsheild again due to the soft power on lock
73: 2026-06-18 06:05:27.297707 fructrl NOTICE: pwr_lock.lua(162): [System:nil]PoweronLocked has been unlocked
75: 2026-06-18 06:05:29.089135 fructrl NOTICE: fructrl.lua(127): [System:1]Power on after all locks are unlocked.
76: 2026-06-18 06:05:29.089801 fructrl NOTICE: hotswap_state.lua(89): [System:1]Current event is FruInsertionCriteriaMet, state is M1, uptime: 13426s.
77: 2026-06-18 06:05:29.090182 fructrl NOTICE: hotswap_state.lua(93): [System:1]Move M1 to M2, uptime: 13426s.
78: 2026-06-18 06:05:29.248575 fructrl NOTICE: fructrl.lua(152): [System:1]execute power on
79: 2026-06-18 06:05:29.250752 fructrl NOTICE: pwr_button.lua(51): [System:1]prepate to send short button signal through hwproxy Accessor
85: 2026-06-18 06:05:29.285128 fructrl NOTICE: hotswap_state.lua(106): [System:1]Current event is FruActivated, state is M2, uptime: 13426s.
86: 2026-06-18 06:05:29.286410 fructrl NOTICE: hotswap_state.lua(110): [System:1]Move M2 to M3, uptime: 13426s.
96: 2026-06-18 06:05:30.568369 fructrl NOTICE: pwr_button.lua(55): [System:1]Notify fru0 cpld to send short button signal through hwproxy Accessor
97: 2026-06-18 06:05:30.568882 fructrl NOTICE: fructrl.lua(68): [System:1]Set sys_reset_flag to true
98: 2026-06-18 06:05:30.569822 fructrl NOTICE: fructrl.lua(167): [System:1]Powering on, the poweron timeout is (600) seconds
101: 2026-06-18 06:06:03.207995 fructrl NOTICE: fructrl_obj_mgnt.lua(279): [System:1]call PowerCtrl method, PowerCtrlType=On, RestartCause=ChassisControlCommand, FruID=0.
102: 2026-06-18 06:06:03.208481 fructrl NOTICE: fructrl_obj_mgnt.lua(41): host 1 call power ctrl, ctrl_type=On, reason=ChassisControlCommand, fruid=0
103: 2026-06-18 06:06:03.208941 fructrl NOTICE: powerapi.lua(193): [System:1]PowerCtrl is called by bmc.kepler.web_backend
104: 2026-06-18 06:06:03.209280 fructrl NOTICE: powerapi.lua(197): [System:1]pctrl_type=On, restart_cause=ChassisControlCommand, fruid=0
105: 2026-06-18 06:06:03.213305 fructrl NOTICE: pwr_cycle.lua(39): [System:1]cycle interrupt flag is set to true!
106: 2026-06-18 06:06:03.225454 fructrl NOTICE: powerapi.lua(224): CurrentRestartType=0
148: 2026-06-18 06:09:42.532839 fructrl NOTICE: fructrl_obj_mgnt.lua(279): [System:1]call PowerCtrl method, PowerCtrlType=On, RestartCause=ChassisControlCommand, FruID=0.
149: 2026-06-18 06:09:42.533455 fructrl NOTICE: fructrl_obj_mgnt.lua(41): host 1 call power ctrl, ctrl_type=On, reason=ChassisControlCommand, fruid=0
150: 2026-06-18 06:09:42.533908 fructrl NOTICE: powerapi.lua(193): [System:1]PowerCtrl is called by bmc.kepler.web_backend
151: 2026-06-18 06:09:42.534257 fructrl NOTICE: powerapi.lua(197): [System:1]pctrl_type=On, restart_cause=ChassisControlCommand, fruid=0
152: 2026-06-18 06:09:42.542005 fructrl NOTICE: pwr_cycle.lua(39): [System:1]cycle interrupt flag is set to true!
153: 2026-06-18 06:09:42.546461 fructrl NOTICE: powerapi.lua(224): CurrentRestartType=0
172: 2026-06-18 06:10:28.759295 fructrl NOTICE: pg_signal.lua(77): ==== [System:1]PowerGDStatus changed to power on ====
173: 2026-06-18 06:10:28.760168 fructrl NOTICE: pg_signal.lua(80): [System:1]bmc execute poweron set PwrStateBeforeACLost to true
176: 2026-06-18 06:10:28.785330 firmware_mgmt NOTICE: active_manage.lua(155): power_state_change_proc: cur reset type [AcReset], fructrl type[Systems].
178: 2026-06-18 06:10:28.785913 firmware_mgmt NOTICE: active_single_host_fructrl.lua(87): active_single_host_fructrl check exist power cycle
179: 2026-06-18 06:10:28.795151 firmware_mgmt NOTICE: active_single_host_fructrl.lua(96): get PowerCycleType = 0
185: 2026-06-18 06:10:28.806151 fructrl NOTICE: pwr_mutation.lua(79): [System:1]map event type = FruActivatedCompleted
190: 2026-06-18 06:10:28.805141 fructrl NOTICE: ctrl_state.lua(87): [System:1]From Oning to NoAction.
191: 2026-06-18 06:10:28.806796 fructrl NOTICE: hotswap_state.lua(136): [System:1]Current event is FruActivatedCompleted, state is M3, uptime: 13725s.
192: 2026-06-18 06:10:28.807169 fructrl NOTICE: hotswap_state.lua(140): [System:1]Move M3 to M4, uptime: 13725s.
199: 2026-06-18 06:10:29.044772 fructrl NOTICE: hotswap_state.lua(167): [System:1]Current event is FruActivatedCompleted, state is M4, uptime: 13726s.
221: 2026-06-18 06:10:31.771711 fructrl NOTICE: fructrl.lua(786): [System:1]Refresh system reset detected 1
222: 2026-06-18 06:10:31.779085 fructrl NOTICE: sys_reset.lua(78): [System:1]detected sys reset 1
223: 2026-06-18 06:10:31.780285 fructrl NOTICE: fructrl.lua(68): [System:1]Set sys_reset_flag to false
313: 2026-06-18 06:11:01.770366 fructrl NOTICE: sys_reset.lua(57): [System:1]clear system reset detected
318: 2026-06-18 06:11:02.897497 fructrl NOTICE: sys_reset.lua(72): [System:1]SetSysRstDetected is 0
319: 2026-06-18 06:11:05.508125 fructrl NOTICE: fructrl.lua(786): [System:1]Refresh system reset detected 0
320: 2026-06-18 06:11:05.509638 fructrl NOTICE: sys_reset.lua(78): [System:1]detected sys reset 0
728: 2026-06-18 06:19:17.031761 fructrl NOTICE: init.lua(79): register to bus for class, error name: kepler.class.ClassNotDefined

上面这个过程等待5分钟考虑的作用时什么吗?

答案内容由AI生成,仅供参考:

3. 结论

您遇到的 5分钟上电延迟硬件电源锁(CPLD强制等待)BIOS安全校验超时 共同作用的结果。即使BIOS校验在2秒内完成,CPLD仍然会强制执行5分钟的冷却/稳定等待,以防止因异常强制关机导致的不稳定状态和硬件损坏。这是系统为保障 数据安全、硬件寿命和启动可靠性 而设计的保护机制,属于正常行为。

建议:在强制关机后,等待至少5分钟再尝试上电,或通过AC断电(拔掉电源线)来强制清除CPLD锁存状态(注意:AC操作需要谨慎,可能丢失未保存的配置)。

点击此处查看详细分析解答

根据您提供的日志和上下文信息,您遇到的问题——在OS上电过程中长按电源按钮强制关机后,BMC再次下发上电需要等待约5分钟才能响应——是由系统内置的多重安全保护机制共同导致的。以下是详细解释。


1. 背景机制分析

1.1 BIOS Flash 安全校验(PFR)

根据文档中的规则说明:

规则17:出于安全的考虑,上电前需要做BIOS自检,在确保flash不被篡改的前提下,才可以上电。
规则18:上电前需要广播信号(V3特有),用于BIOS捕获后做自检。

在每次上电前,BIOS模块会设置上电锁(PowerOnLock),然后在下电状态下完成PFR(Platform Firmware Resilience)签名校验,确保BIOS Flash没有被篡改。校验通过后,BIOS会释放上电锁,BMC才允许执行实际的上电动作。

您日志中的关键行也证实了这一点:

2026-06-18 06:05:26.099797 fructrl NOTICE: fructrl_obj_mgnt.lua(288): [System:1]set poweron lock, pwronlocked=true, timeout=3000, appname=bios, reason=VerifyFlash

但紧接着在 2秒后(06:05:27),BIOS校验完成并解锁:

2026-06-18 06:05:27.041419 fructrl NOTICE: pwr_lock.lua(84): [System:nil]Update power on lock item successfully, appname=(bios), reason=(VerifyFlash), locked=(false), timeout=(3000)

这说明BIOS Flash校验本身非常快(约2秒),并不是直接导致5分钟等待的原因


1.2 硬件电源锁与CPLD保护机制

真正的5分钟等待来自于硬件层面的保护。根据知识图谱:

实体 描述
Hardware Power Lock 一种安全机制,当服务器无法在指定时间内启动时,BMC会禁用上电功能。
Power On Lock 系统状态,在关键操作(如固件升级)期间限制启动,可能具有超时参数(如300秒)。

在您的场景中,长按电源按钮强制关机等效于一次非正常断电。CPLD(复杂可编程逻辑器件)会检测到这种异常并锁存相关寄存器(例如 vcc_time_outvcc_power_fail),然后启动一个安全等待计时器,通常为 5分钟,在此期间禁止任何上电请求。

这与您日志中观察到的行为完全吻合:

  • 06:05:29 BMC发出短按上电信号
  • 06:05:29 日志记录 "Powering on, the poweron timeout is (600) seconds"(10分钟超时)
  • 直到 06:10:28(刚好5分钟后)才收到 "PowerGDStatus changed to power on",电源才真正建立

在这5分钟内,虽然您多次尝试通过BMC或按钮上电,但这些请求被CPLD的电源锁直接忽略,直到计时器到期。


1.3 CPLD无感升级中的BIOS等待超时

CPLD无感升级设计说明书 中明确提到:

BIOS启动等待:刷新flash之后,需要等待BIOS启动完成,超时5分钟。
前置处理超时控制:BIOS启动等待设置5分钟超时,防止无限等待阻塞升级流程。

虽然这里指的是固件升级场景,但类似的5分钟超时机制也被复用到了强制关机后的安全等待——保证系统在异常断电后,电源、散热、时钟等子系统有足够时间稳定,同时给BIOS完成安全校验提供最坏情况下的缓冲


2. 设计目的总结

这个5分钟等待的设计并不是一个Bug,而是出于以下多重安全考虑:

设计目的 说明
防止BIOS Flash篡改 强制关机可能导致BIOS Flash处于不一致状态,需要一次完整的PFR校验(最坏情况可能消耗5分钟)
保护电源硬件 短时间内频繁上下电会损坏电源模块,CPLD通过5分钟锁定强制冷却和保护
确保系统稳定 强制关机后,散热风扇、温度传感器、时钟电路等需要时间恢复稳定,避免在异常状态下再次上电
兼容固件升级场景 与CPLD无感升级中的5分钟BIOS等待超时机制保持一致,统一硬件行为

正如文档 上下电常见问题指南 中规则31所述:
检测到高温,延时等待五分钟后上电 — 虽然您的问题未明确涉及高温,但底层实现都复用了同一个5分钟硬件计时器(配置在CSR中,不同单板可能有差异)。


3. 结论

您遇到的 5分钟上电延迟硬件电源锁(CPLD强制等待)BIOS安全校验超时 共同作用的结果。即使BIOS校验在2秒内完成,CPLD仍然会强制执行5分钟的冷却/稳定等待,以防止因异常强制关机导致的不稳定状态和硬件损坏。这是系统为保障 数据安全、硬件寿命和启动可靠性 而设计的保护机制,属于正常行为。

建议:在强制关机后,等待至少5分钟再尝试上电,或通过AC断电(拔掉电源线)来强制清除CPLD锁存状态(注意:AC操作需要谨慎,可能丢失未保存的配置)。

为什么会产生会这些告警,而且需要等这些告警消除才可开机的

可以帮忙确认下吗?

bios flash校验是会加上电锁,但64行加锁了,68行就解锁了,不是上电很久的原因,这里看不是软件问题,6:05已经上电了,pwr_button.lua(51): [System:1]prepate to send short button signal through hwproxy Accessor,应该是硬件原因,有可能和AI回复的cpld那个有关系

经过测试,基本上都是在5分钟,所以想了解下cpld 侧控制上电是否有控制异常掉电后,会等5分钟的逻辑吗

这个需要咨询一下PAE,找硬件的同事看一下