Spielen mit OurBMC Ausgabe 7: OpenBMC-Interprozesskommunikation D-Bus

Einführung in die Kolumne: „Playing with OurBMC“ ist eine von der OurBMC-Community erstellte Kolumne zum Wissensaustausch. Sie konzentriert sich hauptsächlich auf den Austausch von Grundwissen im Zusammenhang mit der Community und der BMC-Full-Stack-Technologie und deckt alle Aspekte des Wissenstransfers von theoretischen Prinzipien bis hin zur Praxis ab Operationen. Die OurBMC-Community wird Entwicklern durch die Rubrik „Fun OurBMC“ dabei helfen, ein tiefgreifendes Verständnis der Community-Kultur, -Konzepte und -Eigenschaften zu erlangen und das Verständnis der Entwickler für die Full-Stack-Technologie von BMC zu verbessern.

Laden Sie alle ein, der Rubrik „Fun OurBMC“ Aufmerksamkeit zu schenken und gemeinsam die wunderbare Welt der OurBMC-Community zu erkunden. Gleichzeitig laden wir alle Entwickler herzlich ein, zur Kolumne „Playing OurBMC“ beizutragen, gemeinsam zu lernen und Fortschritte zu machen und die Kolumne zu einem Wissensgarten zu machen, der Weisheit sammelt und Kreativität anregt.

In  OpenBMC  ist die Interprozesskommunikation (IPC) eine wichtige Komponente, und D-Bus wird häufig als leichter und effizienter IPC-Mechanismus verwendet. Diese Ausgabe konzentriert sich auf den Weber dieses Kommunikationsnetzwerks, den D-Bus. Zunächst werden die von D-Bus bereitgestellten Schnittstellen und Hauptkonzepte vorgestellt. Anschließend wird eine tiefergehende Analyse des D-Bus auf Basis von OpenBMC-Community-Anwendungen durchgeführt. Durch die Analyse von D-Bus hoffen wir, den Lesern dabei zu helfen, diesen leistungsstarken IPC-Mechanismus besser zu verstehen und zu nutzen, um die Gesamtleistung und Stabilität des Systems zu verbessern.

Einführung in den D-Bus

D-Bus (Desktop Bus) ist ein fortschrittlicher IPC-Mechanismus (Inter-Process Communication), der in Linux-Betriebssystemen weit verbreitet ist. Es ermöglicht Softwareanwendungen, synchron oder asynchron zu kommunizieren und prozessübergreifende Nachrichten zu senden und zu empfangen (wie PIPE/FIFO/Socket/Shared Memory/SysvIpc). Hochverfügbarer IPC-Mechanismus, der die Komplexität des zugrunde liegenden IPC-Mechanismus verbirgt und Entwicklern eine fortschrittlichere und benutzerfreundlichere Schnittstelle bietet:

  • Methodenaufruf:

Wird zum Implementieren prozessübergreifender Methodenaufrufe (Funktionsaufrufe) verwendet und kann in Kombination mit Tools zur Codegenerierung dazu führen, dass prozessübergreifende Funktionsaufrufe kaum von gewöhnlichen Funktionsaufrufen zu unterscheiden sind.

  • Signal:

Der Kommunikationsmechanismus des Publish-Subscribe-Modells (Pub-Sub): Der sendende Prozess registriert und sendet (broadcast) Signale, und der empfangende Prozess abonniert die Signale, an denen er interessiert ist.

  • Eigenschaften:

Es kann mit dem Getter-Setter von Mitgliedsvariablen in einer C++-Klasse verglichen werden. Wenn Prozess A eine Eigenschaft bereitstellt, können andere Prozesse die Eigenschaft über D-Bus lesen und schreiben.

Gleichzeitig werden die folgenden Konzepte verwendet, um das spezifische Objekt des D-Bus-Aufrufs zu bestimmen:

  • Busname:

Der Name eines am Bus registrierten Dienstes ist ein eindeutiger Name, der von jeder Anwendung (oder jedem Kommunikationsobjekt) verwendet wird, um sich selbst zu identifizieren. Dieser Name ist weltweit einzigartig für das D-Bus-System und kann daher von anderen Anwendungen zur Referenz und Kommunikation verwendet werden. Es kann als „IP“-Adresse verstanden werden, analog zum Namen einer lib-Bibliothek.

  • Objektpfad:

Wird zur Identifizierung von Objekten innerhalb einer bestimmten Anwendung oder eines bestimmten Dienstes auf D-Bus verwendet , ähnlich einem Pfad in einem Dateisystem, wird jedoch für D-Bus-Objekte anstelle von Dateien verwendet. Objektpfade folgen zur einfacheren Organisation und Verwaltung normalerweise einer hierarchischen Struktur. Die Namenskonvention für Objektpfade lautet /com/example/MusicPlayer1, was das Stammobjekt in einer Anwendung mit dem Namen „MusicPlayer1“ darstellt. Es kann mit Objekten derselben Klasse (Objekten) in C++ verglichen werden.

  • Schnittstelle:

Die Schnittstelle definiert die vom D-Bus-Objekt bereitgestellten Funktionen, einschließlich Methoden, Eigenschaften und Signale. Eine Schnittstelle kann von mehreren Objekten implementiert und von mehreren Anwendungen oder Diensten verwendet werden. Eine Schnittstelle ähnelt einer Klasse oder Header-Datei in C++, die das Verhalten und die zugänglichen Eigenschaften eines Objekts beschreibt. In D-Bus kann ein Objekt mehrere Schnittstellen implementieren und jede Schnittstelle enthält eine Reihe von Methoden, Eigenschaften und Signalen. Diese Methoden und Eigenschaften können von anderen Anwendungen oder Diensten über D-Bus aufgerufen oder darauf zugegriffen werden.

Praktische D-Bus-Anwendungen

In OpenBMC wird D-Bus häufig in Szenarien wie der Erfassung von Sensordaten, dem Hardware-Fehlermanagement und Fernverwaltungsschnittstellen verwendet. Es macht die Kommunikation zwischen verschiedenen Komponenten einfach und effizient und bietet eine starke Garantie für den stabilen Betrieb des Systems.

Das Folgende ist eine detailliertere Analyse von D-Bus basierend auf den tatsächlichen Anwendungen der OpenBMC-Community.

  • D-Bus-Tool (busctl)

busctl ist ein von systemd bereitgestelltes Befehlszeilentool für die Interaktion mit dem D-Bus-Systembus. Verwenden Sie das Busctl-Tool, um den Busnamen, den Objektpfad, die Schnittstelle und andere Parameter einzugeben und detaillierte Informationen zu erhalten, die vom D-Bus-Objekt bereitgestellt werden, einschließlich Eigenschaften, Signalen, Methodenaufrufen (Methode) usw., damit Benutzer eine haben können intuitiveres Verständnis verschiedener abstrakter Konzepte im D-Bus.

  • Eigentum

Am Beispiel des Programms adcsensor identifiziert dieser Prozess den Chip-SOC über die Konfigurationsdatei, wandelt den ursprünglichen Wert des vom Kernel bereitgestellten ADC in Spannung um und zeigt ihn gemäß dem im beschriebenen Sensor in Form von D-Bus an Konfigurationsdatei:

Busname: xyz.openbmc_project.ADCSensor

Objektpfad: /xyz/openbmc_project/sensors/volt/xxx, mehrere Objektpfade werden gemäß der Konfigurationsdatei auf Platinenebene generiert, um den Spannungssensor darzustellen.

Schnittstelle 1: xyz.openbmc_project.Sensor.Value

Von dieser Schnittstelle bereitgestellte Eigenschaften:

MaxValue (doppelter Typ): Maximalwert des Sensors

MinValue (doppelter Typ): Minimalwert des Sensors

Einheit (String-Typ): Werttyp, Volt

Wert (doppelter Typ): aktueller Wert des Sensors

Schnittstelle 2: xyz.openbmc_project.Sensor.Threshold.Critical

Von dieser Schnittstelle bereitgestellte Eigenschaften:

CriticalAlarmHigh (Bool-Typ): Ob der Schwellenwert für den hohen Schweregrad erreicht ist

CriticalAlarmLow (Bool-Typ): Ob der niedrige Schweregradschwellenwert erreicht ist

CriticalHigh (doppelter Typ): kritischer hoher Schwellenwert

CriticalLow (doppelter Typ): Kritisch niedriger Schwellenwert

Schnittstelle 3: xyz.openbmc_project.Sensor.Threshold Warnung

Von dieser Schnittstelle bereitgestellte Eigenschaften:

WarningAlarmHigh (Bool-Typ): Ob der obere Warnschwellenwert erreicht ist

WarningAlarmLow (Bool-Typ): Ob der untere Warnschwellenwert erreicht ist

WarningHigh (doppelter Typ): Warnung bei hohem Schwellenwert

WarningLow (doppelter Typ): Warnung unterer Schwellenwert

Zu diesem Zeitpunkt können andere Anwendungsmodule verwandte Funktionen über diese abstrahierten D-Bus-Attribute implementieren. Beispielsweise kann das IPMI-Sensormodul dynamisch IPMI SDR generieren, das IPMI SEL-Modul überwacht Attribute und generiert Alarmprotokolle und das Redfish-Modul generiert Sensor-Redfish-Schnittstellen usw.

  • Signal

Alle D-Bus-Objekte verfügen über die Schnittstelle org.freedesktop.DBus.Properties und das Signal PropertiesChanged darunter. Jede Änderung eines Attributs aller Schnittstellen unter diesem Objekt löst das Senden des Signals an D-Bus aus. Das Inhaltsformat des Signals ist sa{sv}as und die entsprechende Bedeutung ist:

STRING: Schnittstellenname

ARRAY aus DICT_ENTRY<STRING,VARIANT> Attributname und geändertem Wert (mehrere)

ARRAY<STRING> Der Name des Attributs, dessen Wert sich geändert hat, der geänderte Wert ist jedoch unbekannt. (mehrere)

Darüber hinaus enthalten alle D-Bus-Nachrichten den Busnamen und den Objektpfad, und andere Prozesse können diese Parameter zur Überwachung frei auswählen, um interessierende Variablen zu erfassen.

  • Methode

Es gibt nur zwei Arten von Nachrichten auf dem D-Bus-Bus: eine ist Signal und die andere ist Methode. Die Hauptunterschiede zwischen den beiden sind folgende:

1. Das Signal wird auf dem Bus gesendet, während die Methode eine an ein charakteristisches Objekt gesendete Nachricht ist.

2. Signal hat keinen Rückgabewert, während Methode einen Rückgabewert haben kann (synchron oder asynchron), abhängig davon, ob die aufgerufene Methode einen Rückgabewert definiert;

3. Signal wird hauptsächlich zur Ereignisbenachrichtigung verwendet, während Methode normalerweise zum Anfordern von Daten oder zum Ausführen von Vorgängen verwendet wird.

Das Lesen und Schreiben von Eigenschaften ist im Wesentlichen eine Methode zum Aufrufen von Get und Set in der Dbus-Standardschnittstelle org.freedesktop.DBus.Properties .

Nehmen Sie als Beispiel die Methode zum Erstellen einer Netzwerkkarten-IP-Adresse:

Busname: xyz.openbmc_project.Network

Objekt: /xyz/openbmc_project/network/<Netzwerkname>

Schnittstelle: xyz.openbmc_project.Network.IP.Create

Methode: IP ssys: „<IP-Protokoll>:ipv6\ipv4“, „<IP-Adresse>“, „<Netzmaskenpräfix>“, „<Netzwerk-Gateway>“, „Neuer IP-Objektpfad“ zurückgeben

Verwenden Sie das Busctl-Tool, um eine IP zu erstellen:

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"

Rückgabewert:

NACHRICHT „o“ {

                OBJECT_PATH „/xyz/openbmc_project/network/eth0/_310_2e10_2e10_2e192_2f24“;

};

Sie können sich die IP-Methode der Schnittstelle xyz.openbmc_project.Network.IP.Create auch als eine Funktion vorstellen, die IP-Informationen eingibt, der Netzwerkkarte eine IP-Adresse hinzufügt und einen neu generierten Objektpfad zurückgibt:

String-IP (String-Protokoll, String-IP-Adresse, vorzeichenlose Zeichennetzmaske, String-Gateway)

Kurz gesagt, D-Bus ist einer der wichtigen Mechanismen für die Kommunikation zwischen Prozessen in OpenBMC. Es ermöglicht die Kommunikation verschiedener Prozesse und Anwendungen miteinander, indem es ein zuverlässiges und flexibles Nachrichtenbussystem bereitstellt. Es vereinfacht die Komplexität der Kommunikation zwischen Prozessen und bietet viele nützliche Funktionen, wodurch die Zuverlässigkeit und Wartbarkeit des OpenBMC-Systems verbessert wird.

Wir heißen alle herzlich willkommen, der OurBMC-Community zu folgen und mehr über die BMC-Technologie zu erfahren.

Offizielle Website der OurBMC-Community:

https://www.ourbmc.cn/

Die Raubkopien von „Qing Yu Nian 2“ wurden auf npmror hochgeladen, was dazu führte, dass npmmirror den Unpkg-Dienst einstellen musste: Es bleibt nicht mehr viel Zeit für Google. Ich schlage vor, dass alle Produkte Open Source sind . time.sleep(6) spielt hier eine Rolle. Linus ist am aktivsten beim „Hundefutter fressen“! Das neue iPad Pro verwendet 12 GB Speicherchips, behauptet jedoch, über 8 GB Speicher zu verfügen. People’s Daily Online bewertet die Aufladung im Matroschka-Stil: Nur durch aktives Lösen des „Sets“ können wir eine Zukunft haben Neues Entwicklungsparadigma für Vue3, ohne die Notwendigkeit von „ref/reactive“ und ohne die Notwendigkeit von „ref.value“. MySQL 8.4 LTS Chinesisches Handbuch veröffentlicht: Hilft Ihnen, den neuen Bereich der Datenbankverwaltung zu meistern Tongyi Qianwen GPT-4-Level-Hauptmodell im Preis reduziert um 97 %, 1 Yuan und 2 Millionen Token
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/ourbmc/blog/11183508
Empfohlen
Rangfolge