IPMI sol命令阻塞

环境

BMC版本:2509

现象

执行sol activate命令阻塞
image

日志

[2026-01-09 11:14:24]  1970-01-03 01:42:11.306922 bmc_soc NOTICE: serial_mgmt.lua(460): Setting uart 5 interconnect with port 5
[2026-01-09 11:14:24]  1970-01-03 01:42:11.309735 bmc_soc NOTICE: serial_mgmt.lua(460): Setting uart 6 interconnect with port 6
[2026-01-09 11:14:24]  1970-01-03 01:42:11.314365 bmc_soc NOTICE: serial_mgmt.lua(460): Setting uart 7 interconnect with port 7
[2026-01-09 11:14:24]  1970-01-03 01:42:11.315962 bmc_soc NOTICE: serial_mgmt.lua(479): reset uart connect successfully
[2026-01-09 11:14:24]  1970-01-03 01:42:15.616546 bmc_soc ERROR: serial_mgmt.lua(248): serial_sw_obj is null
[2026-01-09 11:14:24]  1970-01-03 01:42:15.617040 bmc_soc ERROR: serial_mgmt.lua(268): serial_remote_obj is invalid or system id is not exist, system_id: nil
[2026-01-09 11:14:24]  1970-01-03 01:42:15.619918 bmc_soc NOTICE: serial_mgmt.lua(346): Setting uart 2 interconnect with port 2
[2026-01-09 11:14:24]  1970-01-03 01:42:15.621677 bmc_soc NOTICE: serial_mgmt.lua(197): Set serial direction to (PANEL COM <-> BMC COM) successfully

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

IPMI SOL 命令阻塞问题分析与解决方案

根据您提供的环境信息、现象描述及日志内容,以下是关于 IPMI SOL 命令执行阻塞 问题的全面分析与处理建议。


:magnifying_glass_tilted_left: 问题概述

  • 环境信息

    • BMC 版本:2509(基于 openUBMC 实现)
    • 使用命令:ipmitool -I lanplus sol activate
    • 协议通道:LAN Plus (RMCP+)
    • 现象:命令执行后卡住(阻塞),无法正常进入或退出 SOL 会话。
  • 日志关键错误

    serial_mgmt.lua(248): serial_sw_obj is null
    serial_mgmt.lua(268): serial_remote_obj is invalid or system id is not exist, system_id: nil
    
  • 时间戳异常

    • 系统日志显示时间为 1970-01-03,表明 BMC 系统时间未同步,可能存在 RTC 未初始化或 NTP 配置问题。

:puzzle_piece: 根本原因分析

1. serial_sw_obj is nullserial_remote_obj is invalid

这些错误来源于脚本 serial_mgmt.lua,该脚本负责管理 BMC 的串口连接与 UART 映射。错误表明:

  • serial_sw_obj is null

    • 表示用于控制串行端口切换的对象未被正确初始化。
    • 可能源于:服务依赖未启动、配置文件缺失、或底层驱动加载失败。
  • serial_remote_obj is invalid / system_id: nil

    • system_id 为空,说明目标连接的系统(如 Host CPU 或 DPU)未被识别。
    • 可能原因:Host Agent 未运行、EDMA/BT 通信通道未建立、或 IPMI SSIF/BT 接口异常。

:white_check_mark: 结论SOL 激活流程中,串口管理模块未能获取到有效的系统连接对象,导致连接初始化失败,从而引发命令阻塞。


2. 时钟异常(1970-01-03

  • 时间回退至 Unix 时间起点(1970年),说明:
    • RTC(实时时钟)未正常工作。
    • 或者 BMC 启动时未从主机同步时间。
    • 依赖时间的服务(如会话超时、证书验证、日志记录)可能出现异常。

:warning: 时间不同步可能导致 RMCP+ 加密会话协商失败或会话状态判断错误。


3. 会话管理状态不一致(参考文档 Chunk #3

openUBMC 平台中,存在如下已知行为:

“使用 ipmcget -t sol -d session 查询不到会话,但 ipmcset -t sol -d activate 报错提示已有会话存在。”

这表明:

  • 会话状态未被完全清除(例如直接关闭终端窗口而非使用 sol deactivate)。
  • 导致后台仍保留半开启的会话上下文,而查询接口未能正确反映真实状态。
  • 这属于 SDK 层面对 SOL 会话生命周期管理不同步的问题

:hammer_and_wrench: 解决方案建议

:white_check_mark: 步骤 1:强制终止残留 SOL 会话

即使 ipmcget -t sol -d session 显示无会话,也可能存在残留会话。请尝试清除:

# 尝试关闭当前可能存在的 SOL 会话
ipmitool -I lanplus -H <BMC_IP> -U <user> -P <password> sol deactivate

或通过 BMC 本地 CLI 执行:

ipmcset -t sol -d deactivate

若无效,考虑重启 rmcpd 或整个 BMC 系统。


:white_check_mark: 步骤 2:检查并重启相关服务

确保以下服务正常运行:

# 重启串口管理相关服务(具体服务名视平台而定)
systemctl restart serial-mgmt
systemctl restart rmcpd
systemctl restart host_agent

注意:serial_mgmt.lua 属于 bmc_soc 组件,若其反复报错,建议检查其依赖的 D-Bus 接口或 openubmc 服务是否正常启动。


:white_check_mark: 步骤 3:验证用户权限与 IPMI 功能启用

根据 Set User AccessSet User Payload Access 命令规范:

  • 用户必须具备以下权限方可激活 SOL:
    • IPMI Messaging 已启用(允许通用 IPMI 命令)。
    • SOL Payload Access 已授权。
    • 最低权限等级 ≥ Operator

检查命令:

ipmitool -I lanplus -H <IP> -U <user> -P <password> user payload access <user_id>

若未启用,请通过管理员执行:

ipmitool -I lanplus -H <IP> -U Administrator -P <pass> sol set privilege 4

:white_check_mark: 步骤 4:校准 BMC 系统时间

由于日志时间为 1970 年,表明系统时间异常,可能影响会话安全性(如 RMCP+ 加密)。

临时修复:

date MMDDhhmm[[CC]YY][.ss]
# 示例:设置时间为 2025-01-09 11:14:24
date 010911142025.24

永久修复建议:

  • 配置 NTP 客户端。
  • 确保 BMC 能从 Host 或外部 NTP 服务器同步时间。

:white_check_mark: 步骤 5:升级或打补丁

  • 已知 rmcpd 在版本 1.27.9 存在 SOL 压力测试下崩溃问题(见 Document Chunk #1)。
  • 升级至 rmcpd 1.27.10 或更高版本可规避部分稳定性问题。
  • 同时建议升级 openUBMC 至支持更完善会话清理机制的版本(如 25.12 及以上)。

:books: 补充知识:SOL 激活流程依赖项

依赖组件 作用 常见故障点
serial_mgmt.lua 管理 UART 与端口映射 对象未初始化、system_id 缺失
rmcpd 处理 RMCP+ 会话 会话状态异常、消息发送失败
IPMI Messaging 通用命令通信基础 被用户禁用
SOL Payload Type 启用串行控制负载 未授权用户访问
Host Agent / EDMA Host ↔ BMC 通信通道 通信中断或权限异常

:white_check_mark: 总结

问题 原因 解决方案
sol activate 阻塞 serial_sw_objsystem_id 异常 检查串口服务、重启 rmcpd、确认 Host 连接
日志时间错误(1970年) RTC 未同步 手动设置时间或配置 NTP
会话状态不一致 会话未正确释放 使用 sol deactivate,避免直接关闭终端
访问被拒 用户权限不足 使用 ipmitool 检查并启用 SOL 权限

:end_arrow: 建议操作顺序

  1. 强制退出现有 SOL 会话:sol deactivate
  2. 校正 BMC 系统时间
  3. 重启 rmcpdserial-mgmt 服务
  4. 确认用户具有 KVM/SOL 权限
  5. 重试 sol activate

如问题仍存在,请收集以下信息提交支持团队:

  • ipmitool user list
  • ipmitool sol info
  • 完整 journalctl -u rmcpdserial_mgmt.lua 日志
  • 是否可复现于其他主机或 BMC 上

:light_bulb: 提示:为避免此类问题,建议始终使用 ~.(Tilda + dot)退出 SOL 会话,而非直接关闭终端窗口。

相关链接:

  1. ipmcset -t sol -d activate命令报错
  2. 【rmcpd】1.27.9版本进行 sol looptest 10000压力测试报错
  3. 求问BMA获取硬盘丝印的方式
  4. iTestSmart任务执行时卡住,没有继续执行下去,日志显示正常
  5. Activate Payload 命令详情 | 文档中心 | openUBMC

能否贴出完整日志呢?这部分日志不足以分析出问题原因。

删除doc后缀后解压查看日志
null_20260116-1437.tar.gz.doc (6.9 MB)

是否出现问题的具体时间呢?日志中没有提问对应的时间的日志。另外这个日志的时间和发送ipmi命令的时间是否是相同的呢?这个日志的时间应该是bmc刚刚启动的时间。

这里贴图的ipmi命令结果看着是正常进入了sol会话的,阻塞指的是输入没有响应吗?

重新收集了日志,操作时间:

2026-01-21 11:30:00 IPMI,unknown@unknown,bmc_soc,Set serial direction to (PANEL COM <-> BMC COM) successfully
2026-01-21 11:30:00 IPMI,Administrator@192.168.5.207,rmcpd,Connect SOL successfully

现象是sol activate后没有任何输出,也不响应字符输入、回车。
日志:
dump_info.tar.gz.doc (6.7 MB)

测试时发现,BMC有一路SOL串口连接至CPLD,在CPLD里强制将SOL串口切换到BMC UART或者CPU UART,IMPI SOL都有对应的log输出,上面这条ipmcset指令走的路径是怎样的?结合硬件来看,是不是需要BMC传递一个SOL_SW给CPLD(类似与JTAG_SW),由CPLD路由到对应端口?

1 个赞


看手册,可能是cpld那边没处理好,另外SOL串口(UART5)切换也不走CPLD,属于软件层面的功能。

UART2的BMC面板串口是正常的,可以通过切换选择BMC侧或者KP侧。

哦哦,那可能是软件哪里有问题了 :sweat_smile:

iBMC IPMC 接口说明中有关串口切换的描述

同时也能看到HW提供的载板命令字表格中原先是有载板切换SOL描述的,后续为什么没有沿用的,就不得而知了

日志是否有异常呢

对应的时间点有这些日志。串口的目标是bmc,确认一下bmc是否有配置串口呢?

指的这些配置吗?

        "SerialManagement_0": {
            "Id": 0,
            "Description": "PORT2连接PORT1",
            "Availability": 1,
            "RetainedPolicy": 0,
            "ConnectStatus": 1,
            "ConnectStatusResetPer": 1,
            "SrcSerial": 18,
            "Source": "PANEL COM",
            "SourceId": 1,
            "DestSerial": 17,
            "Destination": "SYS COM",
            "DestinationId": 0
        },
        "SerialManagement_1": {
            "Id": 1,
            "Description": "PORT2连接UART2",
            "Availability": 1,
            "RetainedPolicy": 0,
            "ConnectStatus": 0,
            "ConnectStatusResetPer": 0,
            "SrcSerial": 18,
            "Source": "PANEL COM",
            "SourceId": 1,
            "DestSerial": 2,
            "Destination": "BMC COM",
            "DestinationId": 4
        },
        "SerialManagement_2": {
            "Id": 2,
            "Description": "UART5连接PORT1",
            "Availability": 1,
            "RetainedPolicy": 255,
            "ConnectStatus": 0,
            "ConnectStatusResetPer": 0,
            "SrcSerial": 5,
            "Source": "SOL COM",
            "SourceId": 2,
            "DestSerial": 17,
            "Destination": "SYS COM",
            "DestinationId": 0
        },
        "SerialManagement_3": {
            "Id": 3,
            "Description": "UART5连接PORT2",
            "Availability": 1,
            "RetainedPolicy": 255,
            "ConnectStatus": 0,
            "ConnectStatusResetPer": 0,
            "SrcSerial": 5,
            "Source": "SOL COM",
            "SourceId": 2,
            "DestSerial": 2,
            "Destination": "BMC COM",
            "DestinationId": 4
        },
        "SerialManagement_4": {
            "Id": 4,
            "Description": "UART5连接PORT5",
            "Availability": 1,
            "RetainedPolicy": 255,
            "ConnectStatus": 0,
            "ConnectStatusResetPer": 0,
            "SrcSerial": 5,
            "Source": "SOL COM",
            "SourceId": 2,
            "DestSerial": 21,
            "Destination": "CARD COM1",
            "DestinationId": 12
        },
        "SerialManagement_5": {
            "Id": 5,
            "Description": "UART5连接PORT5",
            "Availability": 1,
            "RetainedPolicy": 255,
            "ConnectStatus": 0,
            "ConnectStatusResetPer": 0,
            "SrcSerial": 5,
            "Source": "SOL COM",
            "SourceId": 2,
            "DestSerial": 21,
            "Destination": "CARD COM2",
            "DestinationId": 13
        },
        "SerialManagement_254": {
            "Id": 254,
            "Description": "PORT2连接PORT0",
            "Availability": 1,
            "RetainedPolicy": 0,
            "ConnectStatus": 0,
            "ConnectStatusResetPer": 0,
            "SrcSerial": 18,
            "Source": "PANEL COM",
            "SourceId": 1,
            "DestSerial": 0,
            "Destination": "CLOSE",
            "DestinationId": 254
        },

不是这个,是可以telnet登录的bmc串口

BMC有面板串口,接串口线可以访问,不是telnet登录的

telnet 登录后尝试手动往/dev/ttySS5设备echo,另外一个终端tail -f查看,看下是否有输出。如果没有输出,那就是SOL连接的设备的问题。

用echo test > /dev/ttySS5测试,tail -f /dev/ttySS5没有输出

预期是连接host吗?host是否正常?

串口配置有点问题,解决后正常了