2603 BT通道不通

问题描述

测试2603版本存在BT通道无法正常通信场景,BIOS日志一直显示bt read failed,lsmod 看到有btc_drv.ko

环境信息

  • 操作系统:[如 Ubuntu 24.04]
  • 软件版本:[如 OpenUBMC2603]
    -bmc日志
    1970-01-01 00:02:08.686167 ipmi_core WARNING: load_bt_ko.lua(124): bt driver is nil after 120 times, load bt driver [bt over localbus]
    1970-01-01 00:02:08.838871 fructrl NOTICE: fructrl_obj_mgnt.lua(288): [System:1]set poweron lock, pwronlocked=false, timeout=300, appname=ipmi_core, reason=wait for launching btc service
    1970-01-01 00:02:08.839587 fructrl NOTICE: pwr_lock.lua(85): [System:nil]Update power on lock item successfully, appname=(ipmi_core), reason=(wait for launching btc service), locked=(false), timeout=(300)
    1970-01-01 00:02:08.843673 ipmi_core NOTICE: ipmi_core_app.lua(506): set power on(unlock) of system[1] for 5 minutes successfully
    1970-01-01 00:02:09.041737 ipmi_core NOTICE: ipmi_core_app.lua(292): init default ipmi command task finished

~ # lsmod

btc_drv 36864 4 - Live 0xffffcb54c70ea000 (O)

bios日志
Current CoreIsolateOnlineFlag config: 1 0
SSBS ON
[SPI_CtrlDrvRead8]:[411L]Wait ACK Timeout!
SpiTpmRead Status: 0x12, detect = 0xFF
[SPI_CtrlDrvRead8]:[411L]Wait ACK Timeout!
SpiTpmRead Status: 0x12, did_vid = 0xFFFFFFFF

Boot firmware (version 9.16.WXD.B01.T01 built at 02/27/2026 20:00)

init BMC.
BT read byte failed.
BT read byte failed.
Write ctrl reg failed
Write DATA reg failed
Write DATA reg failed
Write DATA reg failed
Write DATA reg failed
Write ctrl reg failed
BT read byte failed.
BT read byte failed.

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

总结

当前 BT通道不通 的问题是由于 硬件链路未建立(PCIe未使能)+ 驱动初始化失败(ipmi_core未识别btc_drv) 共同导致。尽管模块已加载,但因底层通信条件未满足,ipmi_core 无法完成驱动注册,最终引发BIOS端持续报错。

:magnifying_glass_tilted_left: 优先排查方向:确认 PCIe Flag 是否启用、CPLD 是否正确触发 B2H_ATN 中断,并考虑 升级 ipmi_core 组件 至已知修复版本。

建议结合硬件设计文档与CPLD配置脚本进行联合分析,并在测试环境中模拟AC上电全过程,抓取完整启动日志以进一步定位。

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

BT通道通信失败问题分析(版本2603)

问题概述

在测试 OpenUBMC 2603 版本时,系统出现 BT通道无法正常通信 的问题。BIOS日志持续打印 BT read byte failed 及寄存器写入失败信息,BMC侧日志显示 bt driver is nil after 120 times,表明虽然内核模块 btc_drv.ko 已加载(通过 lsmod 可见),但 ipmi_core 未能正确初始化BT驱动,导致BTC服务启动失败。


关键现象与日志分析

:white_check_mark: BMC 端日志分析

1970-01-01 00:02:08.686167 ipmi_core WARNING: load_bt_ko.lua(124): bt driver is nil after 120 times, load bt driver [bt over localbus]
1970-01-01 00:02:08.838871 fructrl NOTICE: ... reason=wait for launching btc service
  • bt driver is nil after 120 times:ipmi_core 在尝试初始化BT驱动过程中,连续120次查询未获取到有效的驱动句柄,说明 虽然模块已加载,但驱动未注册成功或未被正确识别。
  • wait for launching btc service:系统因等待BTC服务启动而延迟解锁开机流程,表明 BTC服务是系统关键依赖之一。

:white_check_mark: 内核模块状态

~ # lsmod
btc_drv 36864 4 - Live 0xffffcb54c70ea000 (O)
  • btc_drv.ko 模块已被成功加载,证明 ko文件存在、无语法错误、insmod 成功。
  • 但 ipmi_core 仍无法获取该驱动,说明问题可能出在 驱动注册、通信初始化或硬件使能环节。

:white_check_mark: BIOS 端日志分析

BT read byte failed.
Write ctrl reg failed
Write DATA reg failed
  • 控制状态寄存器(BT Ctrl Status Register)写入失败,表明:
    • BT通道硬件接口未就绪;
    • PCIe链路未建立(BT通道常依赖PCIe通道建链);
    • 或BMC/CPLD未置位必要的使能标志。

根本原因分析

结合知识库与日志,可能导致此问题的原因如下:

1. BMC 或 CPLD 未触发 B2H_ATN 中断

  • 实体关联:BMC or CPLD Did Not Raise B2H_ATN Interrupt → BTC Communication Failure
  • 该中断是BT通道启动通信的关键信号。若未被触发,BMC无法感知主机请求,导致 读取超时、数据传输失败。
  • 常见于:
    • CPLD 固件未正确配置;
    • 硬件复位后未正确初始化;
    • PCIe初始化顺序错误。

2. PCIe Flag 未启用,导致 BT 通道建链失败

  • 实体关联:BT Channel ←[caused by]→ PCIe Flag Not Enabled
  • BT通道依赖于底层PCIe链路的建立。若PCIe未使能,则:
    • BT Ctrl Status Register 初始值无效;
    • 主机与BMC间无法完成握手;
    • 数据读写失败。
  • 日志中多次出现寄存器写失败,强烈暗示物理链路未通。

3. ipmi_core 初始化逻辑缺陷

  • ipmi_core 是闭源组件,负责加载和管理BT驱动。
  • 虽然 bt_drv.ko 被加载,但 ipmi_core 检测不到驱动实例,可能原因:
    • 驱动注册的接口名称或结构体不匹配;
    • load_bt_ko.lua 脚本在2603版本中存在兼容性问题;
    • 模块加载后未正确触发回调机制。

:pushpin: 相关日志代码位置:load_bt_ko.lua(124) 报错,指向脚本内部重试机制失效。

4. BT Ctrl Status Register 初始值异常

  • 该寄存器控制BT通道的使能状态。
  • 若其初始值不正确(如为0),会导致首个IPMI命令失败。
  • BIOS尝试读写该寄存器失败,进一步验证了 通道逻辑未激活。

影响范围

组件 影响
IPMI通信 带内命令(如固件升级、状态查询)可能失败
BIOS启动 依赖BT通道获取BMC信息时可能超时或重启
OTA升级 若veth通道不可用,BT作为fallback失败将导致升级中断
系统可观测性 SEL日志、传感器状态上报受阻

解决方案建议

:white_check_mark: 短期规避措施

  1. 检查并强制启用PCIe flag

    # 查询当前PCIe状态(示例)
    busybox_x hexdump -s 0x400000 /dev/mmcblk0p83
    # 确保相关bit位为enable状态
    
  2. 重启并验证CPLD/BMC固件状态

    • 确认CPLD版本支持当前OpenUBMC版本;
    • 必要时重新烧录CPLD固件,确保B2H_ATN中断正常触发。
  3. 手动触发BTC服务

    # 尝试重新加载并启动服务
    rmmod btc_drv
    insmod /lib/modules/ko/btc_drv.ko
    systemctl restart bmc_core
    

:white_check_mark: 长期修复建议

措施 说明
升级 ipmi_core 到稳定版本 参考知识库:升级至 1.10.30 及以上版本 可解决类似驱动加载超时问题。
验证BTC驱动与内核兼容性 检查 btc_drv.ko 是否为当前内核版本编译,避免符号不匹配。
启用BT通道调试日志 修改 bt.lua 添加更详细日志(如寄存器读写值),便于定位握手失败点。
固件升级流程优化 确保CPLD → BIOS → BMC 启动顺序正确,避免因初始化时序导致通信失败。

相关命令与工具

命令 用途
ipmcget -d --version 查询BMC固件版本(含openUBMCVersion)
lsmod | grep btc_drv 检查驱动是否加载
dmesg | grep -i bt 查看内核加载详情
fru print 或 ipmitool mc info 检查IPMI基本功能是否可用

总结

当前 BT通道不通 的问题是由于 硬件链路未建立(PCIe未使能)+ 驱动初始化失败(ipmi_core未识别btc_drv) 共同导致。尽管模块已加载,但因底层通信条件未满足,ipmi_core 无法完成驱动注册,最终引发BIOS端持续报错。

:magnifying_glass_tilted_left: 优先排查方向:确认 PCIe Flag 是否启用、CPLD 是否正确触发 B2H_ATN 中断,并考虑 升级 ipmi_core 组件 至已知修复版本。

建议结合硬件设计文档与CPLD配置脚本进行联合分析,并在测试环境中模拟AC上电全过程,抓取完整启动日志以进一步定位。

kernel日志
[ 97.490645] [I2C-04-RT<-5|-5>] M<0x30|0x0|0x0|3|10> L<7|0|0> C<7|0|0> E<0x1|0x0|0x0|0x1> I<0x0|0x510|0x0>
[ 97.688047] [I2C-08-RT<-62|-62>] M<0x47|0x1|0x0|1|10> L<1|1|0> C<1|0|1> E<0x10000|0x0|0x4|0x0> I<0x0|0x10|0x24f>
[ 98.008388] [I2C-08-RT<-62|-62>] M<0x21|0x1|0x0|1|10> L<1|1|0> C<1|0|1> E<0x10000|0x0|0x4|0x0> I<0x0|0x10|0x24f>
[ 101.148539] [I2C-08-RT<-62|-62>] M<0x48|0x1|0x0|1|10> L<1|2|0> C<1|0|2> E<0x10000|0x0|0x4|0x0> I<0x0|0x10|0x24f>
[ 130.725303] 52,2000-01-01 00:02:38,3891,init_btc_mode,434,btc mode(2)
[ 130.732930] 53,2000-01-01 00:02:38,3891,btc_lb_int_pin_init,443,pin(63) is reused as gpio
[ 130.741961] ####dump test 0####
[ 130.745711] btc dev mode:2
[ 130.748663] btc priv:0 0
[ 130.751463] btc priv param:61 63
[ 130.752118] 54,2000-01-01 00:02:38,ISR,btc_irq_storm_check,270,Trigger interrupt storm, closes pin(63) interrupt, remain(99/100)s)
[ 130.754815] ####dump test 1####
[ 130.769951] btc dev mode:2
[ 130.775300] btc priv:1 0
[ 130.777916] btc priv param:61 63
[ 130.781494] 55,2000-01-01 00:02:38,3891,btc_probe,555,btc init ok!
[ 136.816902] usb device-0: gadget suspend
[ 141.349551] usb device-0: gadget reset
[ 141.349575] usb device-0: reset configuration. gadget state <8>
[ 142.350472] 56,2000-01-01 00:02:50,ISR,btc_irq_storm_check,270,Trigger interrupt storm, closes pin(61) interrupt, remain(1/100)s)
[ 147.345772] usb device-0: gadget reset
[ 147.345796] usb device-0: reset configuration. gadget state <5>
[ 147.713808] usb device-0: gadget reset
[ 147.713831] usb device-0: reset configuration. gadget state <5>
[ 157.528555] [I2C-04-RT<-5|-5>] M<0x30|0x0|0x0|3|10> L<7|0|0> C<7|

从日志看,应是触发了风暴抑制,该问题一般是cpld发送中断过多导致;可尝试复位 bmc 恢复