用於衛星 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,使用者空間程式可以訪問該檔案。 在執行使用者空間程式之前,需要例項化該裝置。