Sysfs é um sistema de arquivos virtual introduzido pelo kernel Linux 2.6. Sysfs para exportar do espaço do kernel para o espaço do usuário as informações sobre os dispositivos do sistema e drivers , e também é usado para configurar certas funcionalidades centrais.
Durante o ciclo de desenvolvimento do kernel 2.5 ( ramo experimental que se tornará o kernel 2.6), o modelo de driver do Linux foi introduzido a fim de superar certas deficiências do kernel 2.4:
O Sysfs foi projetado para exportar as informações presentes na árvore de dispositivos que não sobrecarregariam mais o procfs . Foi escrito por Patrick Mochel. Maneesh Soni mais tarde escreveu um patch permitindo o uso de memória de massa por sysfs para reduzir sua pegada de RAM em mainframes.
Sysfs é um sistema de arquivos na memória que foi originalmente baseado em ramfs . Ramfs foi escrito durante a estabilização do kernel 2.4.0. Graças à sua simplicidade e ao uso do VFS , ele fornece uma excelente base para derivar dele para a criação de novos sistemas de arquivos na memória.
Sysfs foi inicialmente chamado de DDFS (Device Driver Filesystem, sistema de arquivos para drivers de dispositivo em inglês) e criado para depurar o novo modelo de driver para sua escrita. Anteriormente, a depuração era feita usando procfs para exportar uma árvore de dispositivo, mas sob fortes recomendações de Linus Torvalds , foi decidido usar um novo sistema de arquivos baseado em ramfs. Quando esse novo modelo de driver foi integrado ao kernel 2.5.1, ele recebeu o nome de driverfs .
Durante o ano seguinte de desenvolvimento do kernel branch 2.5, os recursos da infraestrutura do modelo de driver e driverfs começaram a se provar muito úteis para outros subsistemas. O kobjects foi desenvolvido para fornecer um mecanismo para gerenciamento centralizado de objetos e o driverfs foi renomeado para sysfs para expressar sua ignorância dos subsistemas nos quais se baseia.
Para cada objeto adicionado à árvore do modelo de driver (drivers, dispositivos, classes de dispositivos), um diretório é criado em sysfs. O relacionamento pai / filho é representado como subdiretórios em / sys / devices / (representando a camada física). O subdiretório / sys / bus / é preenchido com links simbólicos , representando como cada dispositivo pertence a diferentes barramentos . / sys / class / mostra dispositivos agrupados em classes, como dispositivos de rede, por exemplo, enquanto / sys / block / contém dispositivos de bloco .
Para dispositivos e seus drivers, atributos podem ser criados. Eles são arquivos simples , a única restrição é que cada um pode conter apenas um valor e / ou autorizar a informação de apenas um valor (ao contrário de alguns arquivos procfs, que precisam ser usados por um longo tempo). Viajado). Esses arquivos são colocados no subdiretório do driver correspondente ao dispositivo. O uso de grupos de atributos é possível criando um subdiretório preenchido com atributos.
Exporta informações sobre dispositivos PCI .
Contém informações do host e do dispositivo USB .
O Sysfs é usado por alguns utilitários para acessar informações sobre o hardware e seus drivers (módulos do kernel, como udev ou HAL por exemplo). Os scripts foram escritos para acessar informações previamente obtidas via procfs , e alguns scripts para configurar o hardware e seus drivers por meio de seus atributos.