Me estoy iniciando en el desarrollo de controladores de Linux y tengo una pregunta conceptual, que creo que también ayudará a otros recién llegados al desarrollo del kernel.
Estoy leyendo el libro Controladores de dispositivos Linux y he completado hasta el cap. 3 del libro. Hasta ahora, lo he visto al emitir open
, close
y otros comandos a archivos en el /dev
carpeta, el espacio de usuario puede acceder a las funciones del kernel.
Otro método para compartir el control es a través de archivos en /sys
, donde leer o escribir desde sys
los archivos pueden comunicarse con el controlador.
Quería saber cuáles serían los casos de uso para cada método. ¿Son 2 enfoques para la misma tarea? ¿Tiene uno alguna limitación sobre otro? ¿Alguien puede compartir ejemplos prácticos en los que uno podría ser más útil que el otro?
He leído las otras preguntas aquí y explican dev
y sys
. Si bien eso es útil, quería obtener un conocimiento un poco más profundo sobre cómo ambos difieren y cómo deben usarse.
Respuesta aceptada:
Más o menos:
/dev
contiene nodos de dispositivo, que en los sistemas Unix anteriores era la única forma de interactuar con el núcleo. Hay dos tipos de estos, bloquear dispositivos y personaje dispositivos. La API correspondiente está orientada a algo que permitirá la E/S basada en bloques (algún tipo de disco) o la E/S basada en caracteres (por ejemplo, un puerto serie).
/sys
(y /proc
) se agregaron más tarde, posiblemente inspirados en el sistema operativo Plan 9. Proporcionan subárboles de directorios completos, y las entradas de archivo en estos subárboles contienen texto que describe el estado interno del módulo del núcleo cuando se lee o, cuando se escribe, establece el estado interno.
Así que una aplicación típica sería:
¿Quiere escribir un controlador de kernel para algún tipo de dispositivo de almacenamiento? Usa un /dev
nodo para acceder al propio dispositivo, y /sys
(o /proc
) entradas para ajustar cómo se accede al almacenamiento.