コラム紹介: 「OurBMC で遊ぶ」は、OurBMC コミュニティによって作成された知識共有コラムであり、主にコミュニティと BMC フルスタック テクノロジーに関連する基本的な知識の共有に焦点を当てており、理論的原理から実践的な知識伝達のあらゆる側面をカバーしています。オペレーション。 OurBMC コミュニティは、「Fun OurBMC」コラムを通じて開発者がコミュニティの文化、概念、特徴を深く理解し、BMC のフルスタック テクノロジーに対する開発者の理解を高めるのに役立ちます。
ぜひ皆さん、「Fun OurBMC」コラムに注目して、OurBMC コミュニティの素晴らしい世界を一緒に探索してください。同時に、すべての開発者の皆様に、「Playing OurBMC」コラムに貢献し、一緒に学び、進歩し、コラムを知恵を集め、創造性を刺激する知識の庭に構築することを心から歓迎します。
OpenBMCでは 、プロセス間通信 (IPC) が重要なコンポーネントであり、D-Bus は軽量で効率的な IPC メカニズムとして広く使用されています。今回は、この通信ネットワークの織り手である D-Bus に焦点を当てます。まず、D-Bus が提供するインターフェイスと主な概念を紹介します。次に、OpenBMC コミュニティ アプリケーションに基づいて D-Bus のより詳細な分析が実行されます。 D-Bus の分析を通じて、読者がこの強力な IPC メカニズムをよりよく理解し、システムの全体的なパフォーマンスと安定性を向上させるために使用できるようにしたいと考えています。
Dバスの紹介
D-Bus (デスクトップ バス) は、Linux オペレーティング システムで広く使用されている高度なプロセス間通信 (IPC) メカニズムです。これにより、ソフトウェア アプリケーションが同期または非同期で通信し、クロスプロセス メッセージを送受信できるようになります。従来の IPC メカニズム (PIPE/FIFO/ソケット/共有メモリ/SysvIpc など) と比較して、D-Bus は低遅延、低オーバーヘッドを実現します。高可用性 IPC メカニズムは、基礎となる IPC メカニズムの複雑さを隠し、より高度で使いやすいインターフェイスを開発者に提供します。
-
メソッド呼び出し:
プロセス間のメソッド (関数) 呼び出しを実装するために使用され、コード生成ツールと組み合わせることで、プロセス間の関数呼び出しを通常の関数呼び出しとほとんど区別できないようにすることができます。
-
信号:
パブリッシュ/サブスクライブ (Pub-Sub) モデルの通信メカニズムでは、送信プロセスが信号を登録して送信 (ブロードキャスト) し、受信プロセスが対象の信号をサブスクライブします。
-
プロパティ:
これは、C++ クラスのメンバー変数の Getter-Setter と比較できます。プロセス A がプロパティを提供する場合、他のプロセスは D-Bus を介してそのプロパティを読み書きできます。
同時に、次の概念を使用して、D-Bus 呼び出しの特定のオブジェクトが決定されます。
-
バス名:
バスに登録されるサービスの名前は、各アプリケーション (または通信オブジェクト) が自身を識別するために使用する一意の名前です。この名前は D-Bus システムに対してグローバルに一意であるため、他のアプリケーションで参照や通信に使用できます。これは、lib ライブラリの名前と同様に、「IP」アドレスとして理解できます。
-
オブジェクトパス:
D-Bus 上の特定のアプリケーションまたはサービス内のオブジェクトを識別するために使用されます。ファイル システム内のパスに似ていますが、ファイルではなく D-Bus オブジェクトに使用されます。オブジェクト パスは通常、編成と管理を容易にするために階層構造に従います。オブジェクト パスの命名規則は /com/example/MusicPlayer1 で、これは「MusicPlayer1」という名前のアプリケーションのルート オブジェクトを表します。 C++ では同じクラスのオブジェクト (オブジェクト) と比較できます。
-
インターフェース:
このインターフェイスは、メソッド、プロパティ、信号など、D-Bus オブジェクトによって提供される機能を定義します。インターフェイスは複数のオブジェクトで実装でき、複数のアプリケーションまたはサービスで使用できます。インターフェイスは C++ のクラスまたはヘッダー ファイルに似ており、オブジェクトの動作とアクセス可能なプロパティを記述します。 D-Bus では、オブジェクトは複数のインターフェイスを実装でき、各インターフェイスにはメソッド、プロパティ、および信号のセットが含まれます。これらのメソッドとプロパティは、D-Bus を介して他のアプリケーションやサービスから呼び出したり、アクセスしたりできます。
Dバスの実用化
OpenBMC では、D-Bus はセンサー データ収集、ハードウェア障害管理、リモート管理インターフェイスなどのシナリオで広く使用されています。これにより、さまざまなコンポーネント間の通信がシンプルかつ効率的になり、システムの安定した動作が強力に保証されます。
以下は、OpenBMC コミュニティの実際のアプリケーションに基づいた D-Bus のより詳細な分析です。
-
D-Bus ツール (busctl)
Busctl は、D-Bus システム バスと対話するために systemd によって提供されるコマンド ライン ツールです。 Busctl ツールを使用してバス名、オブジェクト パス、インターフェイス、その他のパラメーターを入力し、プロパティ、信号、メソッド呼び出し (メソッド) など、D-Bus オブジェクトによって提供される詳細情報を取得します。これにより、ユーザーは、 D-Bus のさまざまな抽象概念をより直感的に理解できるようになります。
-
財産
adcsensor プログラムを例にとると、このプロセスは構成ファイルを通じてチップ SOC を識別し、カーネルによって提供される ADC の元の値を電圧に変換し、で説明されているセンサーに従って D-Bus の形式で表示します。設定ファイル:
バス名: xyz.openbmc_project.ADCSensor
オブジェクト パス: /xyz/openbmc_project/sensors/voltage/xxx、ボードレベルの構成ファイルに従って、電圧センサーを表すいくつかのオブジェクト パスが生成されます。
インターフェイス 1: xyz.openbmc_project.Sensor.Value
このインターフェースによって提供されるプロパティ:
MaxValue(double型):センサー最大値
MinValue(double型):センサー最小値
単位 (文字列型): 値の種類、ボルト
Value(double型):センサーの現在値
インターフェイス 2: xyz.openbmc_project.Sensor.Threshold.Critical
このインターフェースによって提供されるプロパティ:
CriticalAlarmHigh (ブール型): 重大度の高いしきい値に達したかどうか
CriticalAlarmLow (bool 型): 重大度の低いしきい値に達したかどうか
CriticalHigh (double 型): クリティカル高しきい値
CriticalLow (double 型): クリティカル低しきい値
インターフェイス 3: xyz.openbmc_project.Sensor.Threshold 警告。
このインターフェースによって提供されるプロパティ:
WarningAlarmHigh (bool 型): 警告上限しきい値に達したかどうか
WarningAlarmLow (bool 型): 警告下限しきい値に達したかどうか
WarningHigh (double 型): 警告上限しきい値
WarningLow (double 型): 警告下限しきい値
この時点で、他のアプリケーション モジュールは、これらの抽象化された D-Bus 属性を通じて関連機能を実装できます。たとえば、IPMI センサー モジュールは IPMI SDR を動的に生成でき、IPMI SEL モジュールは属性を監視してアラーム ログを生成し、Redfish モジュールはセンサー Redfish インターフェイスなどを生成します。
-
信号
すべての D-Bus オブジェクトには org.freedesktop.DBus.Properties インターフェイスとその下に PropertiesChanged シグナルがあります。このオブジェクトの下にあるすべてのインターフェイスの属性が変更されると、信号が D-Bus に送信されます。信号のコンテンツ形式は sa{sv}as で、対応する意味は次のとおりです。
STRING: インターフェース名
DICT_ENTRY<STRING,VARIANT> 属性名と変更された値の ARRAY (複数)
ARRAY<STRING> 値が変更された属性の名前ですが、変更された値は不明です。 (複数)
さらに、すべての D-Bus メッセージにはバス名とオブジェクト パスが含まれており、他のプロセスはこれらのパラメータを自由に選択して監視し、対象の変数をキャプチャできます。
-
方法
D-Bus バス上には 2 種類のメッセージしかありません。1 つはシグナル、もう 1 つはメソッドです。 2 つの主な違いは次のとおりです。
1. シグナルはバス上でブロードキャストされ、メソッドは特性オブジェクトに送信されるメッセージです。
2. シグナルには戻り値がありませんが、メソッドには、呼び出されたメソッドが戻り値を定義しているかどうかに応じて戻り値 (同期または非同期) を持つことができます。
3. シグナルは主にイベント通知に使用され、メソッドは通常、データの要求または操作の実行に使用されます。
Property の読み取りと書き込みは、基本的に、 Dbus 標準インターフェイスorg.freedesktop.DBus.Propertiesで Get および Set を呼び出すメソッドです。
ネットワーク カードの IP アドレスを作成する方法を例に挙げます。
バス名:xyz.openbmc_project.Network
オブジェクト:/xyz/openbmc_project/network/<ネットワーク名>
インターフェース:xyz.openbmc_project.Network.IP.Create
メソッド:IP ssys:“<IP プロトコル>:ipv6\ipv4”“<IP アドレス>” “<ネットマスク プレフィックス>” “<ネットワーク ゲートウェイ>”,return “新しい IP オブジェクト パス”
Busctl ツールを使用して IP を作成します。
Busctl --verbose call xyz.openbmc_project.Network /xyz/openbmc_project/network/eth0 xyz.openbmc_project.Network.IP.Create IP ssys "xyz.openbmc_project.Network.IP.Protocol.IPv4" "10.10.10.192" 24 "10.10 .10.1」
戻り値:
メッセージ「お」{
OBJECT_PATH "/xyz/openbmc_project/network/eth0/_310_2e10_2e10_2e192_2f24";
};
xyz.openbmc_project.Network.IP.Create インターフェイスの IP メソッドは、IP 情報を入力し、ネットワーク カードに IP アドレスを追加し、新しく生成されたオブジェクト パスを返す関数として考えることもできます。
文字列IP(文字列プロトコル、文字列ip_addr、unsigned charネットマスク、文字列ゲートウェイ)
つまり、D-Bus は OpenBMC のプロセス間通信のための重要なメカニズムの 1 つです。信頼性が高く柔軟なメッセージ バス システムを提供することで、さまざまなプロセスやアプリケーションが相互に通信できるようになります。プロセス間通信の複雑さを簡素化し、多くの便利な機能を提供することで、OpenBMC システムの信頼性と保守性が向上します。
ぜひ、BMC コミュニティをフォローして、BMC テクノロジーについて詳しく学んでください。
BMC コミュニティ公式 Web サイト:
「Qing Yu Nian 2」の海賊版リソースが npm にアップロードされたため、npmmirror は unpkg サービスを停止せざるを 得なくなりました。 周宏儀: すべての製品をオープンソースにすることを提案します 。ここで time.sleep(6) はどのような役割を果たしますか? ライナスは「ドッグフードを食べる」ことに最も積極的! 新しい iPad Pro は 12GB のメモリ チップを使用していますが、8GB のメモリを搭載していると主張しています。People 's Daily Online は、オフィス ソフトウェアのマトリョーシカ スタイルの充電についてレビューしています。「セット」を積極的に解決することによってのみ、 Flutter 3.22 と Dart 3.4 のリリース が可能になります。 Vue3 の新しい開発パラダイム、「ref/reactive」、「ref.value」不要 MySQL 8.4 LTS 中国語マニュアルリリース: データベース管理の新しい領域の習得に役立ちます Tongyi Qianwen GPT-4 レベルのメイン モデルの価格が値下げされました97%、1元と200万トークン