openbmc中对oem代码的分析

本文探讨了如何在OEM环境中通过phosphor-ipmi-ipmb模块利用I2C将IPMB报文发送到智能板卡,涉及phosphor-ipmi-ipmb的服务调用和Intel-ipmi-oem模块的报文组织。重点介绍了报文格式、I2C配置及内核驱动初始化方法。

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

主要分析oem中如何将ipmb报文通过I2C进行发送至别的智能板卡。在本次代码分析中,需要下载两个模块,phosphor-ipmi-ipmb 和 intel-ipmi-oem。

phosphor-ipmi-ipmb

该模块会生成一个服务:

名称:xyz.openbmc_project.Ipmi.Channel.Ipmb
路径:/xyz/openbmc_project/Ipmi/Channel/Ipmb
接口:org.openbmc.Ipmb
方法:sendRequest

可以通过以下脚本进行调用。通过该脚本,我们可以利用示波器在对应的I2C总线上看到生成的波形:

#!/bin/bash
IPMB_OBJ="xyz.openbmc_project.Ipmi.Channel.Ipmb"
IPMB_PATH="/xyz/openbmc_project/Ipmi/Channel/Ipmb"
IPMB_INTF="org.openbmc.Ipmb"
ME_CMD_RECOVER="1 0x2e 0 0xdf 4 0x57 0x01 0x00 0x01"
IPMB_CALL="sendRequest yyyyay"

busctl call $IPMB_OBJ $IPMB_PATH $IPMB_INTF $IPMB_CALL $ME_CMD_RECOVER

报文中第一字节数据是用来选择使用哪一条ipmb数据通道,由json文件中的type 和 devIndex共同决定。
在IPMB协议中,BMC芯片与各智能板卡之间采用I2C多主协议进行通讯。目前在我的项目中,他们之间是通过I2C的。phhsphor-ipmi-ipmb生成服务的主要作用就是将传入的报文信息通过物理线路进行发送。该模块的初始化过程中,我们需要在内核中将对应的I2C进行配置为ipmb-dev驱动,将phosphor-ipmi-ipmb对应的json文件进行填写(依据硬件信息),将ipmb模块进行添加到openbmc工程中。

Intel-ipmi-oem

在这个oem模块中,工作就是组织报文,并通过phhsphor-ipmi-ipmb提供的服务进行发送。

附:对于在内核中初始化ipmb驱动,我是采用的比较暴力的方式直接进行修改,未找到正规方式。希望了解该部分内容的朋友多交流啊!

<think>好的,我现在要处理用户关于AMI BMC开发教程和技术文档的查询。首先,我需要回顾用户提供的引用内容,确保准确回答。 用户引用了四个资料:[^1]提到BMC工程师的职责和技能,包括BMC固件开发、Linux驱动、IPMI协议等。[^2]涉及使用QEMU仿真AMI BMC固件的具体脚本。[^3]讨论如何通过I2C读取VR温度,涉及硬件接口。[^4]介绍虚拟媒体框架,使用usbgadget等技术。 用户需要教程和技术文档,但直接资料可能不易获取。我需要结合引用内容,给出学习路径和资源建议。首先,官方文档和开发者资源是关键,但可能需要联系AMI或厂商。然后是开源项目如OpenBMC,虽然AMI代码闭源,但仿真工具如QEMU在引用中有示例,可以指导用户搭建环境。 接着,技术博客和论坛可能有经验分享,比如引用[^4]提到的虚拟媒体框架,可以推荐相关博客。协议文档如IPMI、I2C在引用和中提及,用户需要熟悉这些标准。代码分析方面,引用[^2]的脚本和的框架实现可作为实例学习。最后,实践项目如仿真和驱动开发,结合引用中的例子,帮助用户应用知识。 可能用户是刚开始接触BMC开发,需要从基础开始,逐步深入。要确保回答结构清晰,分步骤指导,并提醒注意AMI代码的闭源性,建议通过仿真和文档学习。同时,生成的相关问题要覆盖仿真环境、协议学习、调试方法和虚拟媒体实现,帮助用户扩展学习方向。</think>### AMI BMC开发学习路径与技术资源指南 AMI BMC作为服务器管理控制器的核心固件,其开发涉及硬件接口、协议栈和系统级编程。以下是基于公开资料的开发学习路径: 1. **官方技术文档获取** - 联系AMI公司或OEM厂商获取《BMC Firmware Development Guide》和《IPMI Implementation Manual》[^1] - 通过NDA协议获取AMI代码库访问权限(需企业合作) 2. **开发环境搭建** ```bash # QEMU仿真环境配置示例(基于引用[2]) qemu-system-arm -M romulus-bmc -drive file=EPC621D8A_P1.60.00.ima,format=raw,if=mtd ``` - 使用AST2500仿真平台验证固件启动流程 - 配置交叉编译工具链(arm-linux-gnueabi) 3. **核心开发领域** - **硬件接口开发** - 通过I2C/SMBus访问传感器(如VR温度读取) - GPIO控制实现硬件状态监测 - 使用libi2c-dev库进行总线操作 - **协议栈实现** - IPMI 2.0消息处理框架开发 - Redfish API接口开发 - KCS接口驱动开发 4. **虚拟媒体开发(引用)** ```c // USB gadget配置示例 struct usb_gadget *gadget; gadget = usb_get_gadget_udc_name("ci_hdrc.0"); ``` - 实现vMedia的USB虚拟存储映射 - NBD协议实现远程镜像挂载 5. **调试技术** ```python # BMC日志解析脚本示例 import re with open('/var/log/bmc.log') as f: for line in f: if 'I2C_ERROR' in line: print(re.findall(r'0x[0-9a-f]{2}', line)) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值