GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿cuándo usar /dev y /sys para la comunicación entre el espacio de usuario y el kernel?

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.


Linux
  1. Linux:¿Diferencia entre /dev/console, /dev/tty y /dev/tty0?

  2. ¿Cuándo debo usar /dev/shm/ y cuándo debo usar /tmp/?

  3. ¿Cuándo debo usar #!/bin/bash y cuándo #!/bin/sh?

  4. ¿Está mal vincular /dev/random a /dev/urandom en Linux?

  5. ¿Por qué se requieren < o > para usar /dev/tcp?

¿Qué son los archivos /dev/zero y /dev/null en Linux?

¿Cómo puedo cambiar la cantidad y el tamaño de los ramdisks de Linux (/dev/ram0 - /dev/ram15)?

Linux:diferencia entre /dev/console, /dev/tty y /dev/tty0

kernel:deshabilitar /dev/kmem y /dev/mem

Cómo usa Linux /dev/tty y /dev/tty0

hacer eco o imprimir /dev/stdin /dev/stdout /dev/stderr