用于卫星 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 完成数据传输,则需要如上定义“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,用户空间程序可以访问该文件。 在运行用户空间程序之前,需要实例化该设备。