在 OpenBMC 中,「Sensor」(傳感器)被定義為能夠監控和提供物理硬件數據的元件,例如溫度、電壓、風扇轉速等。這些傳感器不僅負責收集實時數據,還需通過特定介面與系統進行交互,以實現全面的硬件監控與管理。
數據讀取(Data Reading):
D-Bus 映射(D-Bus Representation):
PropertiesChanged
信號通知系統其他部分,實現數據的實時更新與反饋。閾值與警報管理(Threshold and Alarm Management):
錯誤處理與運行狀態(Error Handling & Operational Status):
兼容性(Compatibility):
虛擬化支持(Virtualization Support):
在 OpenBMC 中,所有傳感器的 D-Bus 路徑必須遵循特定的格式,以確保系統的統一性和可管理性。命名格式如下:
/xyz/openbmc_project/sensors/<type>/<label>
<type>
:表示傳感器的類型,如 temperature(溫度)、fan_tach(風扇轉速)、voltage(電壓)等。<label>
:由使用者自定義,用於識別具體的傳感器,如 ambient、cpu0 等。根據傳感器的核心定義與功能,OpenBMC 提供了多種建立傳感器的方法。這些方法根據數據來源、配置方式以及使用場景的不同,可以分為以下幾類:
phosphor-hwmon 是 OpenBMC 中用於管理和配置傳感器的主要工具和框架。它通過 Linux 的 HWMon 子系統與硬件驅動程序交互,實現數據的自動收集與 D-Bus 映射。
dbus-sensors 提供了一套靈活的應用程序集合,允許開發者通過 D-Bus 接口直接創建和管理傳感器。這種方式支持多種數據來源,包括 sysfs、IPMI 以及自定義數據源。
Entity Manager 是 OpenBMC 中用於管理硬件配置的核心服務。通過編寫 JSON 配置文件,開發者可以定義傳感器的類型、名稱、I2C 地址、閾值等屬性。
Machine Readable Workbook (MRW) 是一種描述硬件配置的 XML 文件格式。OpenBMC 可以根據 MRW 文件自動創建相應的傳感器 D-Bus 對象。
開發者可以通過 D-Bus 接口手動註冊新的傳感器,這種方式適用於需要動態創建傳感器的場景,例如在運行時檢測到新的硬件設備。
開發者可以編寫自定義的應用程序來實現傳感器功能,這種方式適用於需要特殊處理或基於算法的傳感器數據計算。
建立方式 | 特點 | 適用場景 |
---|---|---|
phosphor-hwmon 方式 |
- 直接從 HWMon 子系統讀取數據 - 使用 YAML 文件進行配置 - 自動生成 D-Bus 對象 |
已支持 HWMon 驅動的硬件設備,實現即插即用的傳感器配置。 |
dbus-sensors 方式 |
- 支持多種數據來源 - 通過 YAML 文件定義傳感器 - 可以動態管理傳感器 |
需要靈活配置和管理的傳感器,尤其是多數據源場景。 |
Entity Manager 配置 |
- 通過 JSON 文件定義傳感器屬性 - 支持精細化配置 - 集中管理硬件配置 |
需要精細化或批量管理傳感器屬性的環境。 |
MRW 定義方式 |
- 使用 XML 格式的 MRW 文件 - 自動生成傳感器 D-Bus 對象 - 描述預先定義的硬件配置 |
預先定義好硬件配置的系統,減少手動配置工作量。 |
D-Bus 手動註冊 |
- 通過 D-Bus 接口手動添加傳感器 - 動態創建和管理傳感器 - 實時響應硬件變動 |
動態環境中,需要隨時添加或移除傳感器的場景。 |
自定義應用程序實現 |
- 編寫自定義應用程序處理特殊數據 - 通過 D-Bus 暴露數據 - 支持基於算法的數據計算 |
需要特殊數據處理或非標準數據源的傳感器。 |
phosphor-hwmon 是 OpenBMC 中管理傳感器的核心工具,負責從硬件監控子系統(HWMon)讀取數據並將其映射到 D-Bus。
Temperature:
Ambient:
description: Ambient Temperature
units: C
thresholds:
warning: 75
critical: 85
dbus-sensors 提供了一套靈活的工具,允許開發者通過 D-Bus 接口直接創建和管理傳感器,支持多種數據來源。
sensors:
- type: Temperature
label: CPU0
units: C
thresholds:
warning: 70
critical: 90
Entity Manager 是 OpenBMC 中用於集中管理硬件配置的服務。通過編寫 JSON 配置文件,可以詳細描述傳感器的各項屬性和行為。
{
"sensors": [
{
"name": "AmbientTemp",
"type": "Temperature",
"address": "0x48",
"thresholds": {
"warning": 75,
"critical": 85
}
}
]
}
MRW 是一種描述硬件配置的 XML 文件格式,OpenBMC 可以根據 MRW 文件自動創建相應的傳感器 D-Bus 對象。
<Sensors>
<Sensor>
<Type>Temperature</Type>
<Label>Ambient</Label>
<Units>C</Units>
<Thresholds>
<Warning>75</Warning>
<Critical>85</Critical>
</Thresholds>
</Sensor>
</Sensors>
開發者可以通過 D-Bus 接口手動註冊新的傳感器,這種方法適用於需要動態創建傳感器的場景,例如在運行時檢測到新的硬件設備。
開發者可以編寫自定義的應用程序來實現傳感器功能,這種方法適用於需要特殊處理或基於算法的傳感器數據計算。
import dbus
def create_virtual_sensor():
bus = dbus.SystemBus()
obj = bus.get_object('xyz.openbmc_project.Sensor', '/xyz/openbmc_project/sensors/virtual/temp')
iface = dbus.Interface(obj, 'xyz.openbmc_project.Sensor')
iface.UpdateTemperature(85)
if __name__ == "__main__":
create_virtual_sensor()
在 OpenBMC 系統中,傳感器(Sensor)扮演著關鍵的角色,負責實時監控和提供硬件設備的各項數據。透過多種建立方式,如 phosphor-hwmon 方式、dbus-sensors 方式、Entity Manager 配置、MRW 定義、D-Bus 手動註冊以及自定義應用程序實現,開發者可以根據具體需求選擇最合適的方法來配置和管理傳感器。這些方法不僅提供了靈活的配置選項,還確保了系統的穩定性和可擴展性。
理解傳感器的定義與功能,並掌握多種建立方法,將有助於有效地管理和監控 OpenBMC 系統中的硬件設備,確保系統運行的高效性和穩定性。