IPMI 字符接口与消息通路
1. 分层
1 | userspace /dev/ipmiN |
Message handler负责user、sequence、request/response匹配、event和watchdog/poweroff client协调。
2. 核心对象
- IPMI SMI实例;
ipmi_user;- receive message;
- sequence table;
- SMI handler callbacks;
- maintenance mode和watcher。
Transport注册到message handler后,device interface创建字符node。
3. 用户接口
/dev/ipmiN主要通过ioctl:
- 设置/获取本地地址;
- send command;
- receive message/event;
- register command;
- 设置event接收;
- timing/retry参数。
Read/write并非普通字节流协议,应用应使用OpenIPMI或规范结构。
4. 消息路径
1 | ioctl SEND_COMMAND |
Timeout可能触发retry;late response必须避免匹配到已复用sequence。
5. SI
System Interface支持KCS、SMIC、BT等BMC寄存器协议。状态机可能在IRQ、timer或polling中推进,单次寄存器操作不能阻塞完整命令周期。
6. SSIF
SSIF通过SMBus/I2C发送IPMI message,受adapter传输长度、multipart消息、clock stretching和BMC busy影响。
它与TPM I2C是不同协议和设备。
7. Watchdog边界
IPMI watchdog在本目录实现,但向Linux watchdog语义提供BMC watchdog。它与drivers/watchdog中的SoC watchdog不同:
- BMC可能独立于SoC;
- timeout/action由IPMI命令配置;
-主机总线故障可能导致无法ping; - reboot/power cycle语义不同。
RK3588本地DW watchdog不走IPMI。
8. Poweroff
IPMI poweroff可向BMC发送chassis control。在无BMC或BMC不响应时不能作为唯一可靠关机路径。
9. 并发
- message handler锁保护interface/user/sequence;
- per-user queue配waitqueue;
- transport状态机有自身spinlock/timer;
- unregister需完成pending messages为error;
- callback不能使用已释放user。
10. 安全
IPMI通常拥有高权限:
- reset/power;
-传感器和FRU; - BMC网络配置;
- raw OEM命令;
- firmware更新。
/dev/ipmiN应只给受信管理服务,容器默认不可见。BMC协议和固件也属于独立攻击面。
11. RK3588
Rockchip主要defconfig未显式启用IPMI,常见RK3588板也没有BMC KCS/SSIF节点。服务器化定制板若增加BMC,需按实际transport、DTS/ACPI和最终.config判断。
12. 调试
1 | ls -l /dev/ipmi* |
传输timeout时区分BMC无响应、I2C/KCS硬件问题、sequence耗尽和权限错误。
正在加载留言…