Sysfs
# Sysfs

Sysfs es un sistema de archivos virtual que proporciona el núcleo Linux v2.6. Sysfs exporta información sobre los dispositivos y sus controladores desde el modelo de dispositivos del núcleo hacia el espacio del usuario, también permite configurar parámetros.

## Historia

Durante el ciclo de desarrollo 2.5, se introdujo un modelo de controladores para eliminar varias deficiencias del núcleo 2.4:

* Falta un método unificado para representar las relaciones entre los controladores y los dispositivos.
* No existe un mecanismo hotplug estándar.
* procfs está plagado de información que no es de los procesos.

Sysfs fue diseñado para exportar la información presente en el árbol de dispositivos de manera que no se abuse de procfs. Patrick Mochel lo implementó. Maneesh Sony escribió a posterioridad el parche backing store que reduce la memoria utilizada en los sistemas grandes.

## Descripción Técnica

Para cada objeto añadido en el árbol del modelo de controladores (controladores, dispositivos incluyendo clases) se crea un directorio en sysfs. La relación padre/hijo se refleja con subdirectorios bajo /sys/devices/ (reflejando la capa física). El subdirectorio /sys/bus se puebla con enlaces simbólicos, reflejando el modo en el que los dispositivos pertenecen a diferentes buses. /sys/class muestra dispositivos agrupados de acuerdo a su clase, como por ejemplo red, mientras que /sys/block/ contiene los dispositivos de bloques.

Para los controladores de dispositivos y los dispositivos, se pueden crear atributos. Los atributos son simples ficheros. Se estipula que sólo deben contener un valor o permitir que un solo valor se fije (a diferencia de algunos ficheros en /procfs, que necesitan un análisis intenso). Estos ficheros están incluidos en el subdirectorio del controlador correspondiente al dispositivo. Es posible crear subdirectorios con atributos para agruparlos.

## Algunos buses

### PCI

Exporta información sobre los dispositivos PCI

### USB

Contiene tanto los dispositivos USB como los hosts.

### Buses S/390

Como la arquitectura S/390 contiene dispositivos que no se encuentran en ningún otro sitio, se han creado buses especiales:

* css: Contiene subcanales (actualmente el único driver proporcionado es para subcanales E/S).
* ccw: Contiene dispositivos conectados al canal (manejados por CCWs).
* ccwgroup: Dispositivos artificiales, creados por el usuario y consistentes en dispositivos ccw. Reemplaza parte de la funcionalidad chandev de 2.4
* iucv: Dispositivos artificiales como los netiucv que utilizan la intefície IUCV.

## Sysfs y el espacio de usuario

Distintas aplicaciones utilizan sysfs para acceder a información sobre el hardware y sus controladores (módulos del kernel), tales como udev o HAL. Se han escrito Scripts para acceder a la información que anteriormente se obtenía a través de procfs, y algunos scripts configurar los controladores de los dispositivos y los dispositivos mediante sus atributos.

