Conheça o Sysfs no Linux
Conheça o sistema no Linux encarregado de reconhecer o hardware
O sysfs é um recurso do Kernel para exportar informações úteis sobre o sistema para os processos (programas) dos usuários através de um sistema de arquivo em memória.
O sysfs organiza as informações do Kernel em diretórios de forma rigorosa e baseada na organização interna das estruturas de dados do Kernel.
Os arquivos que são criados neste sistema de arquivos são principalmente em ASCII (texto puro) com um valor por arquivo.
Estas características asseguram que as informações passadas pelo sysfs aos programas sejam precisas e utilizadas facilmente.
Uma vez que a estrutura do sysfs é composta de diretórios, arquivos e links simbólicos, a navegação dentro dele é fácil e intuitiva. O sysfs geralmente é montado no diretório /sys.
Os principais diretórios do sysfs são: block, bus, class, devices, firmware, fs, kernel, module e power.
BLOCK
O diretório block contém subdiretórios para cada sistema de arquivos de bloco (discos rígidos, principalmente) existentes no sistema.
Dentro dos diretórios dos dispositivos, há diversos arquivos que indicam, ente outras coisas, o tamanho do dispositivo, status etc .
BUS
Este diretório contém subdiretórios para cada tipo de barramento suportado pelo Kernel. E cada subdiretório contém os diretórios devices e drivers.
O primeiro contém uma lista de todos os dispositivos encontrados que são do tipo de barramento indicado.
O segundo contém os drivers de dispositivos daquele tipo de barramento.
CLASS
O diretório class contém representações de cada classe de dispositivo que está registrado no Kernel.
As classes indicam o tipo de dispositivo que elas representam. Por exemplo: classe de impressoras, classe de discos etc.
Cada subdiretório de classe terá um diretório para cada tipo de dispositivo encontrado pertencente àquela classe. Por exemplo: a classe “net” contém os dispositivos “eth0” e “eth1”.
E, dentro de cada diretórios de dispositivo, são encontrados arquivos e diretórios associados ao tipo de dispositivo a que ele pertence.
DEVICES
O diretório devices contém a hierarquia global dos dispositivos encontrados e suportados pelo Kernel.
Sua hierarquia de diretórios obedece a organização dos dispositivos em qual tipo de conexão elétrica eles estão conectados. Apenas dois dispositivos são a exceção da regra: dispositivos de plataforma (platform) e de sistema (system).
O primeiro diretório é relativo aos dispositivos periféricos inerentes à plataforma de processamento e barramento do hardware. Por exemplo: dispositivos inerentes a portas de entrada e saída, controladores seriais e paralelos, etc.
Já o system representa os dispositivos não periféricos que não se encaixam em qualquer outra classificação. Por exemplo: CPUs, APICs, temporizadores etc.
FIRMWARE
O diretório firmware contém interfaces para verificar e atribuir objetos específicos de firmware. Firmware são códigos executados durante o processo de carga da máquina, como software da BIOS.
MODULE
O diretório module contém subdiretórios com todos os módulos de Kernel carregados para a memória.
Os módulos são pedaços de programas que podem ou não fazer parte do Kernel, de forma que são lidos e executados de acordo com a necessidade do usuário.
Por exemplo: se você não utiliza com frequência o drive para um HD externo USB, pode optar por carregar o módulo que habilita suporte a discos externos somente quando for fazer uso deste tipo de mídia. Este tipo de arquitetura modular permite que o Kernel fique mais leve, ocupando menos memória e também menos processamento, deixando a CPU mais tempo livre para executar os programas dos usuários.
Um Kernel enxuto permite que o sistema tenha uma eficiência melhor, mas não impede que outras funcionalidades sejam agregadas sob demanda na forma de módulos do Kernel.
É importante saber que todos os diretórios de módulo contêm um arquivo chamado refcnt que conta o número de referências ou número de usuários que fazem uso do módulo específico.
POWER
O diretório power representa o subsistema de gerenciamento de energia. Possui alguns arquivos que representam o método que o sistema irá utilizar para entrar em modo de suspensão ou economia de energia.
É importante você saber que as informações contidas neste sistema de arquivos são organizadas de forma que diversos programas e utilitários fazem uso delas para interagir melhor com o Kernel.
HALD
O hald é um programa que fica em execução em modo de servidor (daemon) que mantém um banco de dados sobre os dispositivos conectados ao sistema, em tempo real.
Este programa fica conectado no Kernel através do D-BUS escutando as mensagens referentes aos dispositivos e provê uma biblioteca de programação API para que outros programas possam descobrir, monitorar e fazer uso dos dispositivos.
O HALD facilita o trabalho dos programadores oferecendo um meio fácil e rápido de interagir com os dispositivos sem precisar fazer acesso direto a eles.
UDEV
O gerenciamento dinâmico de dispositivos (udev) é responsável por manter a estrutura de diretório do /dev (diretório que contém os links que representam os dispositivos) de forma a permitir que somente dispositivos conectados sejam listados na estrutura do /dev.
Geralmente este gerenciador é executado na forma do programa chamado udevd em modo de servidor (daemon) que fica escutando os eventos do Kernel para encontrar quando um dispositivo é removido ou adicionado ao sistema.
Quando se percebe um evento de dispositivo no Kernel ele compara com as regras relacionadas no sysfs para identificar o dispositivo e, depois disso, cria ou remove o link simbólico do dispositivo no diretório /dev.
D-BUS
D-BUS é um projeto de software livre mantido pela freedesktop.org. Seu principal objetivo é criar um barramento de troca de mensagens entre os programas.
Ele permite que os programas interajam entre si de forma que o programador não precisa conhecer a instância do outro programa em que ele deseja se conectar.
Desta forma, o D-BUS oferta uma biblioteca de programação que permite a troca de mensagens entre as aplicações através de protocolos padronizados, utilizando-se do XML para fazer a ligação entre programas distintos.
O D-BUS suporta diversas linguagens de programação de alto nível como Qt, GLib, Java, C#, Python, etc.
Aprenda muito mais sobre Linux em nosso curso online. Você pode fazer a matrícula aqui com trial de 7 dias grátis. Se você já tem uma conta, pode acessar aqui.