// 此模板仅供参考,如果不适用可以修改
装备版本AC命令不生效
[openUBMC编译装备版本中AC命令不生效。打开DFT后,AC命令结果返回80,从BMC日志上查看命令发送成功,但是出现Set DFT ac cycle failed日志。设备实际也不会重启。
指令如下:
ipmcset -d ipmiraw -v "0x30 0x90 0x20 0xdb 0x07 0x00 0x01"
ipmcset -d ipmiraw -v "0x30 0x90 0x31 0x00 0x03"
]
环境信息
期望结果
[在装备版本中,发送AC命令后,设备AC重启]
实际结果
[AC指令发送后,设备依然正常运行]
向请问一下这个AC指令具体是在哪里控制的,需要如何配置才能生效
答案内容由AI生成,仅供参考:
总结
您遇到的AC命令不生效问题,核心原因很可能是在 DFT(装备)模式 下,标准的AC断电控制链路被一个特殊的、功能不完整的“DFT AC Cycle”流程所替代。这导致BMC虽然发送了命令,但并未真正触发CPLD执行断电动作。
最直接的解决方案是检查并配置RAW命令的启用状态,并验证在DFT模式下AC Cycle的具体软件实现逻辑。由于您的问题较为特殊,建议您参考openUBMC社区中关于“AC Test”和“IPMI Command Enabled”的相关讨论(如您提供的链接 https://discuss.openubmc.cn/t/topic/2994/1)以获取更具体的配置方法。
点击此处查看详细分析解答
好的,根据您提供的详细描述和上下文信息,我将为您分析这个AC命令不生效的问题。
首先,我们来梳理一下您遇到的问题中的关键信息。
根据上下文信息,特别是关于“AC Test”和“AC Cycle”的描述,AC断电重启是一个涉及BMC、CPLD和PSU等多个组件的复杂过程。您在装备版本下发送AC命令后,设备没有重启,并且日志中出现了 Set DFT ac cycle failed 错误,这指向了在特定模式(DFT)下AC重启功能的控制逻辑存在问题。
以下是对您问题的具体分析和解答:
1. AC命令的控制流程(根据上下文)
根据文档块(ID: 1)中关于AC Cycle的代码片段,AC命令的下发流程如下:
- 命令入口:BMC收到AC Cycle命令(例如您使用的
ipmiraw 指令)。
- 调用组件:该命令会调用
fructrl 组件的 ac_down() 函数。
- 执行操作:
ac_down() 函数的核心操作是执行系统命令(如 sync 和清理缓存),然后设置一个属性值 (self.objs[1].AC = 1)。
- 关联硬件:根据帖子中的回复(河南昆仑-郑豪伟),设置该属性(
AC)后,会通过“属性关联的accessor”最终关联到 SMC (即CPLD),从而触发硬件的电源控制。
关键点:AC命令的逻辑是通过设置一个“属性值”来间接通知CPLD执行断电操作,而不是BMC直接操作PSU。
2. 您遇到的问题分析
- 问题现象:命令发送成功(BMC日志显示),设备不重启,日志出现
Set DFT ac cycle failed。
- 问题根源定位:
Set DFT ac cycle failed 这个日志信息在您的问题和提供的上下文中都没有直接出现,但它与您提到的“打开DFT后”密切相关。这表明:
- DFT (Design For Test) 模式:您可能是在一个特殊的“装备版本”或“DFT模式”下操作。在这个模式下,标准的AC Cycle控制逻辑可能被修改或覆盖了。
- 控制链路断裂:即便BMC已经执行了设置
AC = 1 的动作,但由于DFT模式的存在,这个设置值可能没有成功传递到CPLD,或者CPLD在DFT模式下忽略了该指令,从而导致 Set DFT ac cycle failed 错误。
3. 如何配置才能生效?(解决方案建议)
根据上下文,BMC命令的可用性是可以通过 Set Command Enables 命令进行配置的。您的AC命令不生效很可能是由于在装备版本或DFT模式下,该RAW命令被限制或未正确启用。
建议您按照以下步骤排查和配置:
-
确认AC Cycle功能的控制属性:
- 检查
fructrl 组件代码(如 ac_cycle.lua),确认在DFT模式下,ac_down() 函数的执行路径是否存在差异。可能有一段代码在检测到DFT模式后,会跳过正常流程,转而执行一个特殊的、可能失败或功能不完整的“DFT AC Cycle”流程。
-
检查并启用RAW命令:
- 根据知识图谱中的信息,
Root 用户在使用 ipmitool 时曾遇到过“command disabled”错误。这强烈暗示某些RAW命令默认是禁用的。
- 您需要使用
Set Command Enables 命令来显式地启用您想要执行的RAW命令(0x30 0x90 0x20 等)。
- 具体操作可以参考IPMI规范或openUBMC文档中关于
Set Command Enables 命令的说明。通常,这需要发送另一个IPMI命令来修改特定通道、NetFn和LUN上的命令掩码。
-
检查设备映射关系:
- 回到
fructrl组件的配置文件(通常在 src/lualib/hardware_config 目录下,如上下文中对“Network Adapter Component”的描述),检查 AC 这个属性是否正确映射到了您的硬件平台对应的CPLD/SMC的寄存器地址。如果映射错误,属性值的改变将不会影响任何硬件引脚。
总结
您遇到的AC命令不生效问题,核心原因很可能是在 DFT(装备)模式 下,标准的AC断电控制链路被一个特殊的、功能不完整的“DFT AC Cycle”流程所替代。这导致BMC虽然发送了命令,但并未真正触发CPLD执行断电动作。
最直接的解决方案是检查并配置RAW命令的启用状态,并验证在DFT模式下AC Cycle的具体软件实现逻辑。由于您的问题较为特殊,建议您参考openUBMC社区中关于“AC Test”和“IPMI Command Enabled”的相关讨论(如您提供的链接 https://discuss.openubmc.cn/t/topic/2994/1)以获取更具体的配置方法。
当前相关消息只能操作日志查看到失败信息,app.log中没有相应日志,有什么办法定位这个命令是如何执行的吗?或者说是哪个组件执行的
分析思路
1、确认BMC装备版本上manufacture组件是否开启了装备模式,因为该AC命令是在manufacture组件组件中实现的
从现象上看,有Set DFT ac cycle failed日志,说明manufacture组件已经开启了装备模式
2、记录Set DFT ac cycle failed日志只有两种情况
①未开启装备模式
②不是带内发送的ipmi命令
问题原因倾向于②,因为使用的是BMC的命令行命令,ipmcset -d ipmiraw -v “0x30 0x90 0x31 0x00 0x03”,不是带内bt通道命令
app.log中没有相应日志是因为错误日志是debug级别,不是notice级别,日志默认打印notice及以上级别
可以尝试在系统下重新下发这两条命令,查看结果
目前在另外一条同版本的设备上验证了,OS下AC正常,BMC的SSH终端是不能AC的。这种情况说明OS下AC是OK的,但是测试那边说他们测试的时候是另外一台设备,现在没法去验证另外一台设备到底是什么问题。的等到测试那边全部完成测试才能确认
测试自己的问题,他们使用了Release版本进行测试。AC指令没有生效