openbmc开发25:添加ipmi命令

本文详细介绍了openbmc中ipmid守护进程如何实现IPMI协议,包括启动源码解读、命令注册与执行、命令响应函数的编写。通过分析`register_netfn_sen_functions()`函数,展示了如何添加新的IPMI命令,如添加测试命令`ipmi_sensor_cmd_test()`,以供开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

openbmc实现ipmi协议的守护进程是ipmid,该软件包已经实现了绝大多数的ipmi协议命令,但是仍然有部分命令没有完善或者没有实现,这些命令需要自己完善或者实现(可能新版本会增加完善部分命令)。本文主要说明原理和添加简单的命令,起抛转引玉的作用,想了解更多只能直接读源码phosphor-ipmi-hostd

1 ipmi实现原理

ipmid是软件包生成的守护进程(软件包还会生成phosphor-softpoweroff应用软件,这里不做过多描述),也是可执行的应用程序,该软件包默认是一定安装到镜像的。ipmid在启动时会加载依赖的lib库,这里的lib库是指实现按照ipmi协议实现对应命令的lib库,比如libusercmds.so、libwhitelist.so等。这些lib库在“/usr/lib/ipmid-providers”路径下,该路径下的库是专门给ipmid程序启动时加载用。另外软件包还提供了通用的lib库和头文件,以提供接口注册ipmi命令等。
usr-dir

2 启动源码解读

2.1 main函数

ipmid入口文件是ipmid-new.cpp文件中,该main函数中通过调用“ipmi::loadProviders(HOST_IPMI_LIB_PATH)”加载“/usr/lib/ipmid-providers”下的lib库,然后调用lib库中函数,进而注册lib库中实现的ipmi协议中的命令,如果lib库出现错误会跳过继续调用下一个,如果错误严重会导致ipmid应用程序重启。(IpmiProvider结构体内有加载lib库的函数)

ipmid-new-1
中间还会有一些其它过程,这里不考虑,在main函数最后会注册ipmi的DBus接口,以便于其他应用程序进行调

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值