如何替换bmc_sdk 中的驱动

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

如何替换 BMC SDK 中的驱动及适配新硬件

替换 BMC SDK 中的驱动

根据现有信息,直接替换 bmc_sdk 中默认驱动并自行编译新驱动存在较大限制,主要原因如下:

1. SDK 与内核代码解耦

  • openUBMC 采用解耦开发模式,其 SDK 和底层 BMC 内核代码是分离的。
  • 开发者无法直接访问完整的内核源码,尤其是与特定硬件相关的部分。
  • 如用户“shenwei(百信)”在社区问答中指出(参考文档 9):“因为提供的是解耦开发。openubmc代码和sdk是解耦。请到应用下载里面下载bmc_sdk组件代码”。

2. 驱动加载方式

  • 虽然缺少完整的内核源码,但可以通过用户态驱动方式加载特定驱动。
  • 根据社区技术支持的建议(参考文档 5),当前操作系统采用的是 RTOS 版本(Linux 内核版本 5.10),如果需要加载驱动,可以考虑通过用户态驱动进行加载。
  • 对于 .ko 文件,原则上可以使用 insmod 命令加载,但由于 SDK 环境和 RTOS 版本的紧密耦合,重新编译的驱动必须与 SDK 使用的 RTOS 版本完全一致,否则会因版本不匹配导致加载失败(参考搜索结果 8)。

3. 获取内核树用于编译

  • BMC SDK 以二进制形式(.zip 文件)分发,不包含完整的、可用于编译的内核树。
  • 您无法直接从官方 SDK 获取用于交叉编译新驱动的完整内核源码和编译工具链。

替代方案建议

  1. 联系社区技术支持:对于特定国产芯片的适配,建议与社区技术支持直接联系,寻求官方的适配方案或可能的扩展接口。
  2. 使用用户态驱动:优先考虑实现用户态驱动程序,通过 /dev/ 接口与硬件通信,规避内核模块编译问题。

新硬件适配与支持情况

1. openUBMC 是否只支持一种 BMC 硬件?

否,openUBMC 已设计为支持多种硬件,但核心 BMC 芯片目前适配有限。

  • 社区明确表示,目前没有适配其他 BMC 芯片(如 ast2400e)的规划(参考文档 3:“当前还没有适配其他BMC芯片的规划”)。
  • 这意味着,虽然 openUBMC 框架具备通用性,但其底层驱动和固件目前主要针对特定的 BMC 芯片(如华为的 HiSilicon 平台)优化。

2. 如何适配新硬件?

虽然不能更换底层 BMC 芯片,但 openUBMC 的设计目标是简化服务器内其他组件的硬件适配。您可以适配以下类型的硬件:

硬件适配范围 (可适配)

硬件类型 适配说明
GPU 卡 可定义 CSR 文件,实现管理、监控和状态上报。非 NVIDIA GPU 需参考特定规范开发代码。
硬盘/硬盘背板 可通过配置 BDF 等信息进行匹配和管理。
网卡 支持 LLDP、OEM 属性适配、OCP 网卡等场景。
RAID 卡、风扇、传感器 作为常见带外管理对象,均在 BMC 的管理范围内。

适配方法与流程

  1. 扩展 BMC API:在进行硬件适配前,需要先完成“扩展对外接口”章节,以确保新硬件的接口与系统兼容(参考文档 10)。
  2. 使用 CSR (Component Self-description Record):openUBMC 使用 CSR 这种描述性语言来定义硬件信息。通过编写或修改 CSR 文件,可以描述新硬件的名称、型号、槽位、BDF 等信息(参考文档 107)。
  3. 利用 BMC Studio:BMC Studio 是一个集成开发环境,提供了“硬件组件适配”功能,可以用来配置和集成新硬件(参考知识图谱实体 BMC Studio)。
  4. 开发指南:社区提供了《硬盘背板开发指南》、《南向网卡驱动适配指南》、《GPU卡适配指导》等详细文档,指导开发者完成特定硬件的适配。

结论

您无法轻易地为一个根本不同的 BMC 芯片(如 ast2400e)替换 bmc_sdk 中的内核驱动,因为核心支持有限且内核源码不开放。然而,openUBMC 的强大之处在于,一旦底层平台确定,它可以通过定义 CSR 和编写上层逻辑来高效地适配各种服务器内部的扩展硬件(如 GPU、网卡、硬盘等),这已经满足了绝大多数服务器 OEM 厂商的需求。对于全新的底层硬件平台,建议关注社区未来的技术路线图或直接参与技术委员会(TC)提出需求。

相关链接:

  1. 我有一台泰山服务器,怎么把ibmc换成openubmc?
  2. 搭建WSL开发环境时下载bmc_sdk找不到
  3. 我有一块ast2400e的BMC芯片,如何将openUBMC刷入呢
  4. BMC冷复位后未记录sel事件
  5. 硬盘背板开发指南 | 文档中心 | openUBMC