Introducción de la columna: "Jugar con OurBMC" es una columna de intercambio de conocimientos creada por la comunidad OurBMC. Se centra principalmente en compartir conocimientos básicos relacionados con la comunidad y la tecnología completa de BMC, y cubre todos los aspectos de la transferencia de conocimientos desde los principios teóricos hasta los prácticos. operaciones. La comunidad OurBMC ayudará a los desarrolladores a obtener una comprensión profunda de la cultura, los conceptos y las características de la comunidad a través de la columna "Fun OurBMC" y mejorará la comprensión de los desarrolladores sobre la tecnología full-stack de BMC.
Bienvenidos a todos a prestar atención a la columna "Diversión OurBMC" y explorar juntos el maravilloso mundo de la comunidad OurBMC. Al mismo tiempo, invitamos sinceramente a todos los desarrolladores a contribuir a la columna "Playing OurBMC", aprender y progresar juntos, y convertir la columna en un jardín de conocimientos que recopile sabiduría y estimule la creatividad.
En OpenBMC , la comunicación entre procesos (IPC) es un componente importante y D-Bus se utiliza ampliamente como un mecanismo IPC ligero y eficiente. Este número se centrará en el tejedor de esta red de comunicación: D-Bus. Primero, se presentan las interfaces y los conceptos principales proporcionados por D-Bus. Luego, se realiza un análisis más profundo de D-Bus basado en aplicaciones de la comunidad OpenBMC. A través del análisis de D-Bus, esperamos ayudar a los lectores a comprender y utilizar mejor este poderoso mecanismo IPC para mejorar el rendimiento general y la estabilidad del sistema.
Introducción al autobús D
D-Bus (Desktop Bus) es un mecanismo avanzado de comunicación entre procesos (IPC) ampliamente utilizado en los sistemas operativos Linux. Permite que las aplicaciones de software se comuniquen de forma sincrónica o asincrónica, enviando y recibiendo mensajes entre procesos. En comparación con los mecanismos IPC tradicionales (como PIPE/FIFO/Socket/memoria compartida/SysvIpc), D-Bus proporciona una latencia baja, gastos generales bajos y. Mecanismo IPC de alta disponibilidad, que oculta la complejidad del mecanismo IPC subyacente y proporciona a los desarrolladores una interfaz más avanzada y fácil de usar:
-
Llamada al método:
Se utiliza para implementar llamadas a métodos (funciones) entre procesos y, combinado con herramientas de generación de código, puede hacer que las llamadas a funciones entre procesos sean casi indistinguibles de las llamadas a funciones ordinarias.
-
Señal:
El mecanismo de comunicación del modelo de publicación-suscripción (Pub-Sub), el proceso de envío registra y envía (difusión) señales, y el proceso de recepción se suscribe a las señales que le interesan.
-
Propiedades:
Se puede comparar con el Getter-Setter de variables miembro en una clase C++. Si el proceso A proporciona una propiedad, otros procesos pueden leer y escribir la propiedad a través de D-Bus.
Al mismo tiempo, se utilizan los siguientes conceptos para determinar el objeto específico de la llamada D-Bus:
-
Nombre del autobús:
El nombre de un servicio registrado en el bus es un nombre único utilizado por cada aplicación (u objeto de comunicación) para identificarse. Este nombre es globalmente exclusivo del sistema D-Bus y, por lo tanto, puede ser utilizado por otras aplicaciones como referencia y comunicación. Puede entenderse como una dirección "IP", de forma análoga al nombre de una biblioteca lib.
-
Ruta del objeto:
Se utiliza para identificar objetos dentro de una aplicación o servicio específico en D-Bus , similar a una ruta en un sistema de archivos, pero se usa para objetos D-Bus en lugar de archivos. Las rutas de objetos suelen seguir una estructura jerárquica para facilitar la organización y gestión. La convención de nomenclatura para las rutas de objetos es /com/example/MusicPlayer1, que representa el objeto raíz en una aplicación denominada "MusicPlayer1". Se puede comparar con objetos de la misma clase (objetos) en C++.
-
Interfaz:
La interfaz define las funciones proporcionadas por el objeto D-Bus, incluidos métodos, propiedades y señales. Una interfaz puede ser implementada por múltiples objetos y utilizada por múltiples aplicaciones o servicios. Una interfaz es similar a una clase o archivo de encabezado en C++, que describe el comportamiento y las propiedades accesibles de un objeto. En D-Bus, un objeto puede implementar múltiples interfaces y cada interfaz contiene un conjunto de métodos, propiedades y señales. Otras aplicaciones o servicios pueden llamar o acceder a estos métodos y propiedades a través de D-Bus.
Aplicaciones prácticas del bus D
En OpenBMC, D-Bus se usa ampliamente en escenarios como la recopilación de datos de sensores, la gestión de fallas de hardware y las interfaces de administración remota. Hace que la comunicación entre diferentes componentes sea simple y eficiente, proporcionando una sólida garantía para el funcionamiento estable del sistema.
El siguiente es un análisis más profundo de D-Bus basado en las aplicaciones reales de la comunidad OpenBMC.
-
Herramienta D-Bus (busctl)
busctl es una herramienta de línea de comandos proporcionada por systemd para interactuar con el bus del sistema D-Bus. Utilice la herramienta busctl para ingresar el nombre del bus, la ruta del objeto, la interfaz y otros parámetros para obtener la información detallada proporcionada por el objeto D-Bus, incluidas propiedades, señales, llamadas a métodos (método), etc., para que los usuarios puedan tener una Comprensión más intuitiva de varios conceptos abstractos en D-Bus.
-
Propiedad
Tomando el programa adcsensor como ejemplo, este proceso identifica el SOC del chip a través del archivo de configuración, convierte el valor original del ADC proporcionado por el kernel en voltaje y lo muestra en forma de D-Bus de acuerdo con el sensor descrito en el archivo de configuración:
Nombre del bus: xyz.openbmc_project.ADCSensor
Ruta del objeto: /xyz/openbmc_project/sensors/voltage/xxx, se generan varias rutas de objetos de acuerdo con el archivo de configuración a nivel de placa para representar el sensor de voltaje.
Interfaz 1: xyz.openbmc_project.Sensor.Value
Propiedades proporcionadas por esta interfaz:
MaxValue (tipo doble): valor máximo del sensor
MinValue (tipo doble): valor mínimo del sensor
Unidad (tipo de cadena): tipo de valor, voltios
Valor (tipo doble): valor actual del sensor
Interfaz 2: xyz.openbmc_project.Sensor.Threshold.Critical
Propiedades proporcionadas por esta interfaz:
CriticalAlarmHigh (tipo bool): si se alcanza el umbral de gravedad alta
CriticalAlarmLow (tipo bool): si se alcanza el umbral de gravedad baja
CriticalHigh (tipo doble): umbral crítico alto
CriticalLow (tipo doble): umbral críticamente bajo
Interfaz 3: xyz.openbmc_project.Sensor.Threshold Advertencia.
Propiedades proporcionadas por esta interfaz:
AdvertenciaAlarmHigh (tipo bool): si se alcanza el umbral de advertencia alto
AdvertenciaAlarmLow (tipo bool): si se alcanza el umbral de advertencia bajo
AdvertenciaAlta (tipo doble): umbral alto de advertencia
AdvertenciaLow (tipo doble): umbral bajo de advertencia
En este punto, otros módulos de aplicación pueden implementar funciones relacionadas a través de estos atributos D-Bus abstraídos. Por ejemplo, el módulo de sensor IPMI puede generar dinámicamente IPMI SDR, el módulo IPMI SEL monitorea atributos y genera registros de alarmas, y el módulo Redfish genera interfaces de sensores de redfish, etc.
-
Señal
Todos los objetos D-Bus tendrán la interfaz org.freedesktop.DBus.Properties y la señal PropertiesChanged debajo. Cualquier cambio en cualquier atributo de todas las interfaces bajo este objeto activará el envío de la señal a D-Bus. El formato de contenido de la señal es sa{sv}as y el significado correspondiente es:
STRING: nombre de la interfaz
ARRAY de DICT_ENTRY<STRING,VARIANT> nombre de atributo y valor modificado (múltiple)
ARRAY<STRING> El nombre del atributo cuyo valor ha cambiado, pero se desconoce el valor modificado. (múltiple)
Además, todos los mensajes D-Bus contendrán el nombre del bus y la ruta del objeto, y otros procesos pueden seleccionar libremente estos parámetros para monitorear y capturar variables de interés.
-
Método
Sólo hay dos tipos de mensajes en el bus D-Bus, uno es Señal y el otro es Método. Las principales diferencias entre los dos son las siguientes:
1. La señal se transmite en el bus, mientras que el método es un mensaje enviado a un objeto característico;
2. La señal no tiene valor de retorno, mientras que el método puede tener un valor de retorno (síncrono o asíncrono), dependiendo de si el método llamado define un valor de retorno;
3. La señal se usa principalmente para notificar eventos, mientras que el método generalmente se usa para solicitar datos o realizar operaciones;
Leer y escribir propiedades es esencialmente un método para llamar a Get y Set en la interfaz estándar de Dbus org.freedesktop.DBus.Properties .
Tomemos como ejemplo el método de creación de una dirección IP de tarjeta de red:
Nombre del bus: xyz.openbmc_project.Network
Objeto:/xyz/openbmc_project/network/<nombre_red>
Interfaz: xyz.openbmc_project.Network.IP.Create
Método: IP ssys: “<Protocolo IP>: ipv6\ipv4” “<Dirección IP>” “<Prefijo de máscara de red>” “<Puerta de enlace de red>”, devuelve “Nueva ruta de objeto IP”
Utilice la herramienta busctl para crear una IP:
busctl --llamada detallada 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"
valor de retorno:
MENSAJE "o" {
OBJECT_PATH "/xyz/openbmc_project/network/eth0/_310_2e10_2e10_2e192_2f24";
};
También puede pensar en el método IP de la interfaz xyz.openbmc_project.Network.IP.Create como una función que ingresa información de IP, agrega una dirección IP a la tarjeta de red y devuelve una ruta de objeto recién generada:
IP de cadena (protocolo de cadena, dirección_ip de cadena, máscara de red de caracteres sin firmar, puerta de enlace de cadena)
En resumen, D-Bus es uno de los mecanismos importantes para la comunicación entre procesos en OpenBMC. Permite que diferentes procesos y aplicaciones se comuniquen entre sí proporcionando un sistema de bus de mensajes confiable y flexible. Simplifica la complejidad de la comunicación entre procesos y proporciona muchas funciones útiles, mejorando así la confiabilidad y la capacidad de mantenimiento del sistema OpenBMC.
Bienvenidos a todos a seguir la comunidad OurBMC y aprender más sobre la tecnología BMC.
Sitio web oficial de nuestra comunidad BMC:
Los recursos pirateados de "Qing Yu Nian 2" se cargaron en npm, lo que provocó que npmmirror tuviera que suspender el servicio unpkg: No queda mucho tiempo para Google. Sugiero que todos los productos sean de código abierto. time.sleep(6) aquí juega un papel. ¡Linus es el más activo en "comer comida para perros"! El nuevo iPad Pro utiliza 12 GB de chips de memoria, pero afirma tener 8 GB de memoria. People's Daily Online revisa la carga estilo matrioska del software de oficina: Sólo resolviendo activamente el "conjunto" podremos tener un futuro para Flutter 3.22 y Dart 3.4 . nuevo paradigma de desarrollo para Vue3, sin necesidad de `ref/reactive `, sin necesidad de `ref.value` Lanzamiento del manual chino de MySQL 8.4 LTS: le ayudará a dominar el nuevo ámbito de la gestión de bases de datos Tongyi Qianwen Precio del modelo principal de nivel GPT-4 reducido en un 97%, 1 yuan y 2 millones de tokens