2512SP1 bt通道不通

问题描述

目前测试2512 LTS SP1版本存在BT通道无法正常通信场景,分析发现/lib/modules/ko/bt_drv.ko未正常加载,在bmc系统下insmod该ko文件,dmeg查看已加载成功,重拉bmc_core服务(因ipmi_core在其内),ipmi_core显示加载驱动失败。请帮忙分析原因,因ipmi_core未开源。

环境信息

  • 操作系统:Ubuntu 24.04

  • 软件版本:OpenUBMC2512LTS SP1

重现步骤

  1. 加载bt_drv.ko



  2. 重拉bmc_core服务,ipmi_core 打印如下,仍加载失败
    1970-01-01 03:08:58.298828 ipmi_core WARNING: load_bt_ko.lua(124): bt driver is nil after 120 times, load bt driver [bt over localbus]
    1970-01-01 03:08:58.390109 ipmi_core ERROR: load_bt_ko.lua(128): ipmi load bt driver [bt over localbus] failed, ret false

期望结果

BT通道可正常通信

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

:pushpin: 总结与结论

维度 分析
问题根源 实际加载的是通用 bt_drv.ko,但 ipmi_core 必须依赖专用 btc_drv.ko 才能完成 BT 通道初始化
驱动差异 btc_drv.ko 是 OpenUBMC 定制驱动,实现 BT over LocalBus 协议并与 D-Bus 服务集成;bt_drv.ko 仅为底层通信支持
系统机制 ipmi_core 是闭源核心模块,在启动时轮询 btc 驱动就绪状态,超时则报错退出
配置要求 BT 通道需配套升级 CPLD、BIOS、MCU,否则即使驱动加载也可能建链失败
最终结论 缺少或错误加载 btc_drv.ko 是导致 BT 通道不通的根本原因
点击此处查看详细分析解答

OpenUBMC 2512 LTS SP1 BT通道通信异常问题分析

根据提供的日志和系统行为,以下是对 OpenUBMC 2512 LTS SP1 版本中 BT 通道无法正常通信 问题的全面分析。


:magnifying_glass_tilted_left: 问题概述

  • 现象:BT 通道通信失败,/lib/modules/ko/bt_drv.ko 驱动加载后,ipmi_core 服务在启动过程中仍报错:“load bt driver [bt over localbus] failed”。
  • 环境
    • 操作系统:Ubuntu 24.04
    • 软件版本:OpenUBMC2512 LTS SP1
  • 关键线索
    • 手动 insmod bt_drv.ko 加载成功。
    • lsmod 显示 bt_drv 已加载,但 btc_drv 未自动加载。
    • ipmi_core 日志提示:bt driver is nil after 128 times, load bt driver [bt over localbus] failed
    • 最终错误:ipmi_core 加载 BT 驱动失败,导致 BTC 服务未启动,BT 通道不通

:puzzle_piece: 根本原因分析

:white_check_mark: 1. 实际加载的是 bt_drv.ko,而非 BMC 所需的 btc_drv.ko

关键差异:

驱动文件 用途
bt_drv.ko 标准 Linux BT 驱动(如蓝牙),或通用 BT over LPC 实现
btc_drv.ko OpenUBMC 定制的 BMC-to-Host 通信驱动(BT Channel),用于 IPMI/BT 协议

:light_bulb: 从搜索结果【ID:1】可见:

“bt over localbus需要配套升级,否则很容易出现BT不通”
并且 必须使用 btc_drv.ko 驱动,不能仅靠标准 bt_drv

证据:

  • 用户手动加载的是 bt_drv.ko,但从模块依赖关系看,btc_drvipmi_core 真正等待的服务驱动
  • 日志中 unknown_service NOTICE: bt_drv_init.lua(22): waiting for btc driver to initialize 表明:系统在等待 btc_drv 初始化,而不是 bt_drv
  • ipmi_core 在 Lua 脚本(load_bt_ko.lua)中会轮询 120 次检查 bt driver is nil,说明它期望一个由 btc_drv 提供的 D-Bus 接口或设备节点,但未出现。

:white_check_mark: 2. bt_drv.kobtc_drv.ko 不兼容或未正确配置

虽然 bt_drv.ko 成功加载并打印了 bt init ok!,但这只是驱动模块加载成功,并不代表 BT 通道已注册到 ipmi_core 所需的服务框架中

  • bt_drv.ko 可能仅实现底层硬件访问(LPC/BT 接口读写),但未实现 OpenUBMC 特有的 “BT over LocalBus” 协议栈
  • btc_drv.ko 不仅处理通信,还负责与 bmc.kepler.ipmi_core D-Bus 服务交互,注册通道、上报状态、处理心跳等。

:link: 来自文档【ID:2《openUBMC IPMI协议栈管理特性设计说明书》】:

BT 驱动抽象为管理基类,并派生出 openUBMC 的 BT 子类,支持多通道、消息队列、故障恢复
——这意味着 btc_drv.ko专为 OpenUBMC 定制的扩展驱动,不能简单替换。


:white_check_mark: 3. ipmi_core 是闭源组件,依赖特定驱动命名与接口

重要关联信息:

  • 知识图谱实体 [ipmi_core] 描述指出:

    ipmi_core 是闭源部分,可能因与 btc_drv.ko 模块交互异常而引发问题。”

  • 关系bakbad 指出 btc_drv.ko 是在 ipmi_core 内部加载的组件。

影响:

  • ipmi_core 可能通过硬编码或配置文件指定必须加载 btc_drv.ko,且期望其提供特定的 D-Bus 接口、设备节点(如 /dev/bt_channel0)或 sysfs 属性
  • 即使 bt_drv.ko 创建了 /dev/bt,如果 ipmi_core 找不到预期的 btc 接口,则判定“驱动未加载”。

:white_check_mark: 4. bmc_core 重启后未触发 btc_drv.ko 自动加载机制

  • 用户通过 systemctl restart bmc_core 试图重拉 ipmi_core,但该操作并不会自动加载缺失的驱动。
  • 正常流程应由启动脚本(如 /etc/init.d/bt-loader)或 ipmi_core 自身的 Lua 脚本加载 btc_drv.ko
  • 当前环境下:缺少 btc_drv.ko 文件 或 启动脚本错误地加载了 bt_drv.ko

:hammer_and_wrench: 解决方案建议

:white_check_mark: 1. 确认并加载正确的驱动模块:btc_drv.ko

# 检查是否存在 btc_drv.ko
find /lib/modules -name "btc_drv.ko"

# 如果存在,手动加载
insmod /lib/modules/ko/btc_drv.ko

# 观察 dmesg 和 ipmi_core 日志
dmesg | tail -20
journalctl -u ipmi_core --since "1 min ago"

:warning: 若无 btc_drv.ko,说明固件包不完整或镜像构建时遗漏该驱动。


:white_check_mark: 2. 检查驱动配套性与 CPLD/BMC/BIOS 兼容性

根据文档【ID:1】:

“bt over localbus 需要配套升级:基础板 CPLD、扩展板 CPLD、基础板 MCU、BIOS”

请确认:

  • 当前使用的 BIOS 版本是否支持 OpenUBMC 2512 LTS SP1 的 BT 协议?
  • CPLD 是否已升级至匹配版本?
  • 主板 BT 通道模式是否为预期值(如 mode 3)?

可查看串口日志是否有 btc mode: 3 类似信息。


:white_check_mark: 3. 离线分析 ipmi_core 所需的驱动依赖

btc_drv.ko 确实缺失:

  • 检查 openUBMC_primary_partition_image 或 HPM 包中是否包含 ko/btc_drv.ko
  • 与发布团队核对:2512 LTS SP1 是否应包含 btc_drv.ko?是否因裁剪被移除?

:white_check_mark: 4. 使用 traceipmi 抓取 BT 通信行为(辅助诊断)

# 在 OpenUBMC 中启用 IPMI 跟踪
busctl --user call bmc.kepler.ipmi_core /bmc/kepler/Debug/IpmiCore/TraceIpmi \
       bmc.kepler.Debug.IpmiCore.TraceIpmi Trace a{ss}bsyyss 0 true "bt" 0xff 0xff "" "file"

查看是否能捕获主机 BIOS 发起的 BT 请求,判断是 BMC 不响应,还是通道未建立。


:white_check_mark: 5. 建议规避措施

临时解决(仅用于调试):

# 创建符号链接强制兼容(风险高,仅测试用)
ln -sf bt_drv.ko btc_drv.ko
insmod btc_drv.ko  # 实际加载 bt_drv

:prohibited: 不推荐长期使用:可能导致协议不一致、数据错乱。


:pushpin: 总结与结论

维度 分析
问题根源 实际加载的是通用 bt_drv.ko,但 ipmi_core 必须依赖专用 btc_drv.ko 才能完成 BT 通道初始化
驱动差异 btc_drv.ko 是 OpenUBMC 定制驱动,实现 BT over LocalBus 协议并与 D-Bus 服务集成;bt_drv.ko 仅为底层通信支持
系统机制 ipmi_core 是闭源核心模块,在启动时轮询 btc 驱动就绪状态,超时则报错退出
配置要求 BT 通道需配套升级 CPLD、BIOS、MCU,否则即使驱动加载也可能建链失败
最终结论 缺少或错误加载 btc_drv.ko 是导致 BT 通道不通的根本原因

:white_check_mark: 建议操作清单

  1. :white_check_mark: 检查 /lib/modules/ko/ 是否存在 btc_drv.ko
  2. :white_check_mark: 若存在,手动 insmod btc_drv.ko 并观察日志
  3. :white_check_mark: 若不存在,请联系 OpenUBMC 固件发布方确认是否遗漏
  4. :white_check_mark: 核对 BIOS/CPLD 版本是否与 OpenUBMC 2512 LTS SP1 兼容
  5. :white_check_mark: 使用 traceipmi 工具验证 BT 通道通信情况
  6. :white_check_mark: 提交日志至社区或支持邮箱(如 huangding12@huawei.com),附带一键收集包

:compass: 参考来源

  • 知识图谱:ipmi_core, BTC Driver, bmc.kepler.ipmi_core
  • 搜索结果:【1】IPMI管理定位问题、【2】IPMI协议栈设计说明书
  • 社区实践:Bakbad 用户在 OpenUBMC 社区中多次报告类似 BT 通道问题,证实驱动配套是常见瓶颈。

btc_drv.ko当前已经加载,BT通信仍然不行

查看bios侧日志bt相关打印,看一下是否有提示,比如中断未初始化。另外就是AI回复的BT 通道需配套升级 CPLD、BIOS、MCU。

请问一下这个问题解决了吗,遇见了同样的问题

最后改了BTCMode的值解决的,在vpd仓中。