卫星 MC 的 IPMB 驱动程序

智能平台管理总线或 IPMB 是一种 I2C 总线,它提供机箱内不同板卡之间的标准化互连。此互连在基板管理 (BMC) 和机箱电子设备之间。IPMB 还通过 IPMB 总线与消息传递协议相关联。

使用 IPMB 的设备通常是管理控制器,它们执行管理功能,例如为前面板接口提供服务、监视基板、在系统机箱中热插拔磁盘驱动器等...

当在系统中实现 IPMB 时,BMC 用作控制器,以使系统软件可以访问 IPMB。BMC 通过 IPMB 向设备(通常是卫星管理控制器或卫星 MC)发送 IPMI 请求,设备将响应发送回 BMC。

有关 IPMB 和 IPMB 消息格式的更多信息,请参阅 IPMB 和 IPMI 规范。

卫星 MC 的 IPMB 驱动程序

ipmb-dev-int - 这是卫星 MC 上所需的驱动程序,用于接收来自 BMC 的 IPMB 消息并发送响应。此驱动程序与 I2C 驱动程序和用户空间程序(如 OpenIPMI)配合使用

  1. 它是一个 I2C 从后端驱动程序。因此,它定义了一个回调函数,将卫星 MC 设置为 I2C 从设备。此回调函数处理接收到的 IPMI 请求。

  2. 它定义了读取和写入函数,以使用户空间程序(如 OpenIPMI)能够与内核通信。

加载 IPMB 驱动程序

驱动程序需要在启动时或手动首先加载。首先,请确保您的配置文件中包含以下内容:CONFIG_IPMB_DEVICE_INTERFACE=y

  1. 如果您希望在启动时加载驱动程序

  1. 将此条目添加到您的 ACPI 表中,在适当的 SMBus 下

    Device (SMB0) // Example SMBus host controller
    {
    Name (_HID, "<Vendor-Specific HID>") // Vendor-Specific HID
    Name (_UID, 0) // Unique ID of particular host controller
    :
    :
      Device (IPMB)
      {
        Name (_HID, "IPMB0001") // IPMB device interface
        Name (_UID, 0) // Unique device identifier
      }
    }
    
  2. 设备树示例

    &i2c2 {
           status = "okay";
    
           ipmb@10 {
                   compatible = "ipmb-dev";
                   reg = <0x10>;
                   i2c-protocol;
           };
    };
    

如果要使用原始 i2c 块而不是 smbus 完成数据 xmit,则需要如上定义“i2c-protocol”。

  1. 从 Linux 手动

    modprobe ipmb-dev-int
    

实例化设备

加载驱动程序后,您可以按照“如何实例化 I2C 设备”中的描述实例化该设备。如果您有多个 BMC,每个 BMC 通过不同的 I2C 总线连接到您的卫星 MC,您可以为每个 BMC 实例化一个设备。

实例化的设备的名称包含与其关联的 I2C 总线号,如下所示

BMC1 ------ IPMB/I2C bus 1 ---------|   /dev/ipmb-1
                              Satellite MC
BMC1 ------ IPMB/I2C bus 2 ---------|   /dev/ipmb-2

例如,您可以从用户空间在总线 2 上以 7 位地址 0x10 实例化 ipmb-dev-int 设备

# echo ipmb-dev 0x1010 > /sys/bus/i2c/devices/i2c-2/new_device

这将创建设备文件 /dev/ipmb-2,用户空间程序可以访问该文件。在运行用户空间程序之前,需要实例化该设备。