问题描述
装备执行ac命令,需要进行dft 使能,使用如下代码,结果在重启到第三次时,会报使能失败
代码如下:
#使能DFT
en_dft_err=""
VendorID_DFT=""
A_VendorID_DFT=""
for A_VendorID_DFT in "0xdb 0x07 0x00" "0x14 0xe3 0x00"
do
ipmitool raw 0x30 0x90 0x20 ${A_VendorID_DFT} 0x01 > enableDft.txt 2>&1
if [ $? -eq 0 ]; then
VendorID_DFT=$(echo "${A_VendorID_DFT}" | sed "s/0x//g")
VendorID_DFT_x="${A_VendorID_DFT}"
break
else
en_dft_err="execute cmd failed: 0x30 0x90 0x20 ${A_VendorID_DFT} 0x01,return:`cat enableDft.txt | tr -d "\r\n"` ; ${en_dft_err}"
echo "[ipmitool_enable_dft] fail ${en_dft_err}" | tee -a level3_item.txt
error_quit
fi
done
if [ -z "${VendorID_DFT}" ]; then
echo "[ipmitool_enable_dft] fail ${en_dft_err}" | tee -a level3_item.txt
error_quit
fi
下面是调用的结果

环境信息
-
操作系统:[如 Ubuntu 24.04]
-
软件版本:3.8.10
-
硬件配置:na
-
重现步骤
- 目前在装备整个流程中,只要涉及装备使能,都有可能出现返回失败的问题
期望结果
set dft mode 成功
实际结果
失败 ,返回 0xd6
尝试过的解决方案
闭源代码,没有思路
分析结论
闭源装备命令 因为某些原因概率性失败,需要定位
答案内容由AI生成,仅供参考:
问题分析与结论
根据知识图谱中的信息,错误码 0xD6 明确表示 “Command cannot be executed because it is disabled”(命令无法执行,因为它被禁用了)。
您使用的使能命令 ipmitool raw 0x30 0x90 0x20 ${A_VendorID_DFT} 0x01 在执行时返回 0xD6,这表明系统在接收到该命令时,判断 DFT 命令接口本身(DFT Command)当前处于被禁止(Disabled)状态,因此拒绝了本次使能请求。
这看起来是一个时序或系统状态问题。可能的原因包括:
- 系统未就绪:在系统(特别是 BMC)刚启动或重启后的极短时间内,某些关键服务或模块尚未完全初始化完毕。此时,DFT 功能的开关可能处于一个“未就绪”或“默认禁用”的锁定状态,导致使能命令被拒绝。
- 状态竞争:您的脚本在重启后快速循环执行
ipmitool 命令。在第三次重启时,可能恰好触发了某种状态机冲突。例如,前一个重启流程中与 DFT 相关的资源(如 FruCtrl 在系统复位时触发的恢复流程)尚未完全释放或状态未重置,导致新的使能请求被视为无效。
- 闭源模块的内部逻辑:根据您的描述,该问题涉及闭源代码。闭源的 DFT 模块内部可能维护着一个复杂的使能状态机。错误码
0xD6 的出现,暗示该模块内部判定“使能 DFT”的指令在当前上下文中不被允许,这可能是由于其内部状态、计数或与其他硬件交互的时序不匹配导致的。
解决方案建议
基于以上分析,建议从以下几个方面进行排查和解决:
-
增加延迟等待:这是最直接的临时解决和验证方案。
- 在执行 DFT 使能命令之前,尤其是在系统重启后,增加一个适当的、固定的等待时间(例如 10-30 秒),以确保 BMC 及相关服务完全启动并就绪。您可以尝试调整这个等待时间,看是否能提高成功率。
-
检查系统状态:在执行使能命令前,通过其他 IPMI 命令(如 ipmitool mc info 或 ipmitool sel list)确认系统已完全启动且无异常事件。虽然不能直接获取 DFT 状态,但可以间接判断系统是否稳定。
-
日志分析:
- 详细检查
app.log 或闭源组件的相关日志,重点关注 manufacture 或 dft 相关模块在命令失败前后的打印信息。日志中可能记录 Set DFT ac cycle failed 或类似的关键字,并附带更详细的原因(如前面提到的“未开启装备模式”或“非带内命令”等)。
- 重点观察与 SystemReset 事件相关的日志。知识图谱提到 FruCtrl 会协调系统复位状态并触发恢复动作,这可能与 DFT 状态的重置和恢复有关。
-
代码级深入分析(如果可能):
- 您需要在闭源模块中查找与
Set DFT Mode 命令处理相关的代码,特别是当返回 0xD6 时的逻辑分支。
- 查找命令
F 0 30 90 20 DB 07 00 01(对应 0xdb 0x07 0x00 制造商ID)的处理函数,分析其在何种系统状态下会判定 DFT 为禁用状态而返回 0xD6。
- 关注与
SystemRestartByCommand 事件的处理逻辑。系统复位后,是否有特定的状态清理或初始化流程?第三次重启时的状态是否与第一、二次不同?
总结
您遇到的问题本质上是一个硬件/固件状态机与软件控制流之间的时序冲突。错误码 0xD6 清晰地指明了故障点:系统认为 DFT 命令接口处于禁用状态,从而拒绝了使能请求。
最直接有效的排查方向是在脚本中增加更可靠的系统就绪等待机制,并深入分析闭源模块在收到系统复位事件后的状态恢复逻辑。
点击此处查看详细分析解答
好的,根据您提供的上下文信息,我对您遇到的“装备使能命令概率性返回失败,返回码0xd6”问题进行分析。
问题分析与结论
根据知识图谱中的信息,错误码 0xD6 明确表示 “Command cannot be executed because it is disabled”(命令无法执行,因为它被禁用了)。
您使用的使能命令 ipmitool raw 0x30 0x90 0x20 ${A_VendorID_DFT} 0x01 在执行时返回 0xD6,这表明系统在接收到该命令时,判断 DFT 命令接口本身(DFT Command)当前处于被禁止(Disabled)状态,因此拒绝了本次使能请求。
这看起来是一个时序或系统状态问题。可能的原因包括:
- 系统未就绪:在系统(特别是 BMC)刚启动或重启后的极短时间内,某些关键服务或模块尚未完全初始化完毕。此时,DFT 功能的开关可能处于一个“未就绪”或“默认禁用”的锁定状态,导致使能命令被拒绝。
- 状态竞争:您的脚本在重启后快速循环执行
ipmitool 命令。在第三次重启时,可能恰好触发了某种状态机冲突。例如,前一个重启流程中与 DFT 相关的资源(如 FruCtrl 在系统复位时触发的恢复流程)尚未完全释放或状态未重置,导致新的使能请求被视为无效。
- 闭源模块的内部逻辑:根据您的描述,该问题涉及闭源代码。闭源的 DFT 模块内部可能维护着一个复杂的使能状态机。错误码
0xD6 的出现,暗示该模块内部判定“使能 DFT”的指令在当前上下文中不被允许,这可能是由于其内部状态、计数或与其他硬件交互的时序不匹配导致的。
解决方案建议
基于以上分析,建议从以下几个方面进行排查和解决:
-
增加延迟等待:这是最直接的临时解决和验证方案。
- 在执行 DFT 使能命令之前,尤其是在系统重启后,增加一个适当的、固定的等待时间(例如 10-30 秒),以确保 BMC 及相关服务完全启动并就绪。您可以尝试调整这个等待时间,看是否能提高成功率。
-
检查系统状态:在执行使能命令前,通过其他 IPMI 命令(如 ipmitool mc info 或 ipmitool sel list)确认系统已完全启动且无异常事件。虽然不能直接获取 DFT 状态,但可以间接判断系统是否稳定。
-
日志分析:
- 详细检查
app.log 或闭源组件的相关日志,重点关注 manufacture 或 dft 相关模块在命令失败前后的打印信息。日志中可能记录 Set DFT ac cycle failed 或类似的关键字,并附带更详细的原因(如前面提到的“未开启装备模式”或“非带内命令”等)。
- 重点观察与 SystemReset 事件相关的日志。知识图谱提到 FruCtrl 会协调系统复位状态并触发恢复动作,这可能与 DFT 状态的重置和恢复有关。
-
代码级深入分析(如果可能):
- 您需要在闭源模块中查找与
Set DFT Mode 命令处理相关的代码,特别是当返回 0xD6 时的逻辑分支。
- 查找命令
F 0 30 90 20 DB 07 00 01(对应 0xdb 0x07 0x00 制造商ID)的处理函数,分析其在何种系统状态下会判定 DFT 为禁用状态而返回 0xD6。
- 关注与
SystemRestartByCommand 事件的处理逻辑。系统复位后,是否有特定的状态清理或初始化流程?第三次重启时的状态是否与第一、二次不同?
总结
您遇到的问题本质上是一个硬件/固件状态机与软件控制流之间的时序冲突。错误码 0xD6 清晰地指明了故障点:系统认为 DFT 命令接口处于禁用状态,从而拒绝了使能请求。
最直接有效的排查方向是在脚本中增加更可靠的系统就绪等待机制,并深入分析闭源模块在收到系统复位事件后的状态恢复逻辑。
应该有app日志吧 这个不是manufacture仓里面的么