¿Es un controlador de dispositivo en Linux un programa / proceso o es solo una biblioteca?


23

Es un controlador de dispositivo, un programa que se ejecuta solo, o es solo una biblioteca (un grupo de funciones) que se carga en la memoria y los programas pueden llamar a una de sus funciones (por lo que no se ejecuta por sí solo).

Y si es un programa, ¿tiene una ID de proceso, por lo que, por ejemplo, puedo finalizar un controlador de dispositivo de la misma manera que puedo finalizar cualquier otro proceso?


1
Puede "descargar" un controlador con rmmod, pero solo si no se está utilizando.
pjc50

Respuestas:


35

En Linux, muchos controladores de dispositivos son parte del núcleo, no bibliotecas o procesos. Programas interactúan con estos archivos mediante dispositivos (por lo general en /dev) y varias llamadas al sistema, tales como open, read, write, ioctl...

Sin embargo, hay excepciones. Algunos controladores de dispositivos usan una mezcla de stubs de controladores de kernel y bibliotecas de espacio de usuario ( por ejemplo, usando UIO). Otros se implementan completamente en el espacio del usuario, generalmente sobre alguna interfaz de bits (UART o GPIO). En ambos casos, generalmente están en proceso, por lo que no verá un proceso separado, solo el proceso que está utilizando el dispositivo.

Para "terminar" un controlador de dispositivo, tendría que detener todos los procesos que lo usan, luego eliminar sus módulos del núcleo (suponiendo que esté construido como módulos) y, opcionalmente, cualquier otro módulo que use y que ya no sea necesario. Puede enumerar los módulos en su sistema usando lsmody descargarlos usando rmmodo modprobe -r, los cuales solo funcionarán si lsmodindica que no tienen usuarios.


2
Si es lo suficientemente valiente y compiló su kernel CONFIG_MODULE_FORCE_UNLOAD, puede intentar rmmod -fforzar la descarga de módulos que están en uso / no están diseñados para ser eliminados / etc. Esto, además de resultar en un kernel en un estado poco confiable, También mancha el núcleo.
Ruslan

9

Primero debe definir qué es un controlador. Lo definiré como un programa o subrutina que controla un dispositivo (como su cámara) o un subsistema (como un sistema de archivos). Ya sea que lo haga directamente a través del programa del sistema o de los servidores del núcleo o los procesos de aterrizaje de usuarios, no debería ser el tema principal de esta pregunta esencialmente semántica.

En algunos casos, Linux solo proporciona un protocolo genérico escrito en software donde el "controlador" real es un árbol de dispositivos. Esa es una configuración de parámetros de hardware y qué software usar que componen un controlador.

En general, las interfaces y protocolos de controladores se implementan utilizando módulos del núcleo que se cargan según sea necesario, definidos por los árboles de dispositivos o las reglas de udev. Un módulo de kernel no es, en sentido estricto, un proceso o biblioteca.

Una biblioteca es solo un conjunto estático de código que se puede cargar en cualquier proceso dado. Los sistemas operativos modernos cargan estas bibliotecas en la memoria compartida. Un proceso puede vincularse a cualquier cantidad de bibliotecas compartidas.

Un proceso es un programa en ejecución en el que el programa o núcleo del sistema ha asignado recursos como la memoria del sistema y el tiempo de CPU. Los módulos del núcleo pueden o no seguir este patrón por sí mismos, pero independientemente no se consideran procesos de facto en Linux.

Entonces, para responder a su pregunta, un controlador no necesita ser procesado, pero puede serlo. Si bien el código puede existir en una biblioteca, el controlador todavía se carga en la memoria mediante un programa, ya sea el núcleo en forma de módulos de núcleo o procesos de usuario.

Se convierte más en un argumento semántico al considerar cuál es en realidad la totalidad de un controlador. Se podría decir que un controlador siempre es un programa, pero a veces no es como en el caso de los árboles de dispositivos, sino que también podría ser un proceso de usuario, un archivo de árbol de dispositivos, reglas de udev y un módulo de kernel donde el proceso y el módulo usan bibliotecas para componer La lógica de un conductor.


0

Un controlador de dispositivo Linux es esencialmente una biblioteca de espacio de kernel . Sus llamadas son iniciadas principalmente por los controladores de nivel superior o por los procesos de espacio de usuario que lo utilizan.

Solo hay unas pocas excepciones de esto:

  • Los hilos del kernel también pueden iniciarse / detenerse mediante controladores, que son esencialmente procesos sin una parte de espacio de usuario.
  • Los controladores de interrupción son iniciados por el hardware y no por los procesos de espacio de usuario.

En otros sistemas, como en GNU Hurd, los controladores son esencialmente demonios con los que los procesos pueden interactuar. En Linux, los controladores son bibliotecas. Sin embargo, ambos conceptos tienen sus ventajas y desventajas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.