Introdução da coluna: "Brincando com OurBMC" é uma coluna de compartilhamento de conhecimento criada pela comunidade OurBMC. Ela se concentra principalmente no compartilhamento de conhecimento básico relacionado à comunidade e à tecnologia full-stack BMC, cobrindo todos os aspectos da transferência de conhecimento, desde princípios teóricos até práticos. operações. A comunidade OurBMC ajudará os desenvolvedores a obter uma compreensão profunda da cultura, dos conceitos e das características da comunidade por meio da coluna "Fun OurBMC" e aprimorará a compreensão dos desenvolvedores sobre a tecnologia full-stack da BMC.
Bem-vindos a todos para prestarem atenção à coluna "Fun OurBMC" e explorarem juntos o maravilhoso mundo da comunidade OurBMC. Ao mesmo tempo, convidamos sinceramente todos os desenvolvedores a contribuir para a coluna "Playing OurBMC", aprender e progredir juntos e transformar a coluna em um jardim de conhecimento que reúne sabedoria e estimula a criatividade.
No OpenBMC , a comunicação entre processos (IPC) é um componente importante e o D-Bus é amplamente utilizado como um mecanismo IPC leve e eficiente. Esta edição terá como foco o tecelão desta rede de comunicação – D-Bus. Primeiramente são apresentadas as interfaces e principais conceitos fornecidos pelo D-Bus. Em seguida, é realizada uma análise mais aprofundada do D-Bus com base nas aplicações da comunidade OpenBMC. Através da análise do D-Bus, esperamos ajudar os leitores a compreender e utilizar melhor este poderoso mecanismo IPC para melhorar o desempenho geral e a estabilidade do sistema.
Introdução ao barramento D
D-Bus (Desktop Bus) é um mecanismo avançado de comunicação entre processos (IPC) amplamente utilizado em sistemas operacionais Linux. Ele permite que aplicativos de software se comuniquem de forma síncrona ou assíncrona, enviando e recebendo mensagens de processo cruzado. Em comparação com mecanismos IPC tradicionais (como PIPE/FIFO/Socket/memória compartilhada/SysvIpc), o D-Bus fornece baixa latência, baixa sobrecarga e baixa sobrecarga. mecanismo IPC de alta disponibilidade, ocultando a complexidade do mecanismo IPC subjacente, fornecendo aos desenvolvedores uma interface mais avançada e fácil de usar:
-
Chamada de método:
Usado para implementar chamadas de métodos (funções) entre processos e combinado com ferramentas de geração de código, pode tornar as chamadas de funções entre processos quase indistinguíveis das chamadas de funções comuns.
-
Sinal:
O mecanismo de comunicação do modelo publicar-assinar (Pub-Sub), o processo de envio registra e envia sinais (transmissão), e o processo de recebimento assina os sinais nos quais está interessado.
-
Propriedades:
Ele pode ser comparado ao Getter-Setter de variáveis de membro em uma classe C++. Se o processo A fornecer uma propriedade, outros processos poderão ler e gravar a propriedade por meio do D-Bus.
Ao mesmo tempo, os seguintes conceitos são usados para determinar o objeto específico da chamada D-Bus:
-
Nome do ônibus:
O nome de um serviço registrado no barramento é um nome exclusivo usado por cada aplicação (ou objeto de comunicação) para se identificar. Este nome é globalmente exclusivo para o sistema D-Bus e pode, portanto, ser usado por outras aplicações para referência e comunicação. Pode ser entendido como um endereço “IP”, de forma análoga ao nome de uma biblioteca lib.
-
Caminho do objeto:
Usado para identificar objetos dentro de um aplicativo ou serviço específico no D-Bus , semelhante a um caminho em um sistema de arquivos, mas usado para objetos D-Bus em vez de arquivos. Os caminhos dos objetos geralmente seguem uma estrutura hierárquica para facilitar a organização e o gerenciamento. A convenção de nomenclatura para caminhos de objetos é /com/example/MusicPlayer1, que representa o objeto raiz em um aplicativo chamado "MusicPlayer1". Pode ser comparado a objetos da mesma classe (objetos) em C++.
-
Interface:
A interface define as funções fornecidas pelo objeto D-Bus, incluindo métodos, propriedades e sinais. Uma interface pode ser implementada por vários objetos e usada por vários aplicativos ou serviços. Uma interface é semelhante a uma classe ou arquivo de cabeçalho em C++, que descreve o comportamento e as propriedades acessíveis de um objeto. No D-Bus, um objeto pode implementar múltiplas interfaces, e cada interface contém um conjunto de métodos, propriedades e sinais. Esses métodos e propriedades podem ser chamados ou acessados por outras aplicações ou serviços através do D-Bus.
Aplicações práticas do barramento D
No OpenBMC, o D-Bus é amplamente utilizado em cenários como coleta de dados de sensores, gerenciamento de falhas de hardware e interfaces de gerenciamento remoto. Torna a comunicação entre os diferentes componentes simples e eficiente, proporcionando uma forte garantia para o funcionamento estável do sistema.
A seguir está uma análise mais aprofundada do D-Bus com base nas aplicações reais da comunidade OpenBMC.
-
Ferramenta D-Bus (busctl)
busctl é uma ferramenta de linha de comando fornecida pelo systemd para interagir com o barramento do sistema D-Bus. Use a ferramenta busctl para inserir o nome do barramento, caminho do objeto, interface e outros parâmetros para obter informações detalhadas fornecidas pelo objeto D-Bus, incluindo propriedades, sinais, chamadas de método (método), etc., para que os usuários possam ter uma compreensão mais intuitiva de vários conceitos abstratos em D-Bus.
-
Propriedade
Tomando o programa adcsensor como exemplo, este processo identifica o chip SOC através do arquivo de configuração, converte o valor original do ADC fornecido pelo kernel em tensão e o exibe na forma de D-Bus de acordo com o sensor descrito no arquivo de configuração:
Nome do barramento: xyz.openbmc_project.ADCSensor
Caminho do objeto: /xyz/openbmc_project/sensors/voltage/xxx, vários caminhos de objeto são gerados de acordo com o arquivo de configuração no nível da placa para representar o sensor de tensão.
Interface 1: xyz.openbmc_project.Sensor.Value
Propriedades fornecidas por esta interface:
MaxValue (tipo duplo): valor máximo do sensor
MinValue (tipo duplo): valor mínimo do sensor
Unidade (tipo string): tipo de valor, volts
Valor (tipo duplo): valor atual do sensor
Interface 2: xyz.openbmc_project.Sensor.Threshold.Critical
Propriedades fornecidas por esta interface:
CriticalAlarmHigh (tipo bool): se o limite de alta gravidade foi atingido
CriticalAlarmLow (tipo bool): se o limite de baixa gravidade foi atingido
CriticalHigh (tipo duplo): limite alto crítico
CriticalLow (tipo duplo): Limite criticamente baixo
Interface 3: xyz.openbmc_project.Sensor.Threshold Aviso.
Propriedades fornecidas por esta interface:
WarningAlarmHigh (tipo bool): se o limite de aviso alto foi atingido
WarningAlarmLow (tipo bool): se o limite baixo de aviso foi atingido
WarningHigh (tipo duplo): aviso de limite alto
WarningLow (tipo duplo): aviso de limite baixo
Neste ponto, outros módulos de aplicação podem implementar funções relacionadas através destes atributos D-Bus abstraídos. Por exemplo, o módulo sensor IPMI pode gerar SDR IPMI dinamicamente, o módulo IPMI SEL monitora atributos e gera logs de alarme, e o módulo Redfish gera interfaces de sensor redfish, etc.
-
Sinal
Todos os objetos D-Bus terão a interface org.freedesktop.DBus.Properties e o sinal PropertiesChanged abaixo dela. Qualquer alteração em qualquer atributo de todas as interfaces neste objeto acionará o sinal a ser enviado ao D-Bus. O formato do conteúdo do sinal é sa{sv}as e o significado correspondente é:
STRING: nome da interface
ARRAY de nome do atributo DICT_ENTRY<STRING,VARIANT> e valor alterado (múltiplo)
ARRAY<STRING> O nome do atributo cujo valor foi alterado, mas o valor alterado é desconhecido. (múltiplo)
Além disso, todas as mensagens D-Bus conterão o nome do barramento e o caminho do objeto, e outros processos poderão selecionar livremente esses parâmetros para monitoramento para capturar variáveis de interesse.
-
Método
Existem apenas dois tipos de mensagens no barramento D-Bus, uma é Sinal e a outra é Método. As principais diferenças entre os dois são as seguintes:
1. O sinal é transmitido no barramento, enquanto o Método é uma mensagem enviada para um objeto característico;
2. Signal não tem valor de retorno, enquanto Method pode ter um valor de retorno (síncrono ou assíncrono), dependendo se o método chamado define um valor de retorno;
3. O sinal é usado principalmente para notificação de eventos, enquanto o método geralmente é usado para solicitar dados ou realizar operações;
Ler e escrever Property é essencialmente um método de chamar Get e Set na interface padrão Dbus org.freedesktop.DBus.Properties .
Veja o método de criação de um endereço IP de placa de rede como exemplo:
Nome do barramento:xyz.openbmc_project.Network
Objeto:/xyz/openbmc_project/network/<nome_da_rede>
Interface:xyz.openbmc_project.Network.IP.Create
Método:IP ssys:“<Protocolo IP>:ipv6\ipv4”“<Endereço IP>” “<Prefixo da máscara de rede>” “<Gateway de rede>”,retorna “Novo caminho do objeto IP”
Use a ferramenta busctl para criar um 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"
valor de retorno:
MENSAGEM "o" {
OBJECT_PATH "/xyz/openbmc_project/network/eth0/_310_2e10_2e10_2e192_2f24";
};
Você também pode pensar no método IP da interface xyz.openbmc_project.Network.IP.Create como uma função que insere informações de IP, adiciona um endereço IP à placa de rede e retorna um caminho de objeto recém-gerado:
string IP (string protocolo, string ip_addr, máscara de rede de caracteres não assinados, string gateway)
Resumindo, o D-Bus é um dos mecanismos importantes para comunicação entre processos no OpenBMC. Ele permite que diferentes processos e aplicações se comuniquem entre si, fornecendo um sistema de barramento de mensagens confiável e flexível. Ele simplifica a complexidade da comunicação entre processos e fornece muitas funções úteis, melhorando assim a confiabilidade e a capacidade de manutenção do sistema OpenBMC.
Bem-vindos a todos para seguir a comunidade OurBMC e aprender mais sobre a tecnologia BMC.
Site oficial da comunidade OurBMC:
Os recursos piratas de "Qing Yu Nian 2" foram carregados no npm, fazendo com que o npmmirror suspendesse o serviço unpkg. Zhou Hongyi: Não resta muito tempo para o Google. Sugiro que todos os produtos sejam de código aberto . time.sleep(6) aqui desempenha um papel. Linus é o mais ativo em “comer comida de cachorro”! O novo iPad Pro usa 12 GB de chips de memória, mas afirma ter 8 GB de memória. O People’s Daily Online analisa o carregamento estilo matryoshka do software de escritório: Somente resolvendo ativamente o “conjunto” poderemos ter um futuro . novo paradigma de desenvolvimento para Vue3, sem a necessidade de `ref/reactive `, sem necessidade de `ref.value` MySQL 8.4 LTS Manual chinês lançado: Ajuda você a dominar o novo domínio de gerenciamento de banco de dados Tongyi Qianwen nível GPT-4 modelo principal preço reduzido em 97%, 1 yuan e 2 milhões de tokens