Ejemplos de desarrollo de controladores para Linux
El principio de funcionamiento del controlador de dispositivo Linux
Linux es una variante del sistema operativo Unix. Los principios e ideas para escribir controladores en Linux son exactamente los mismos que en otros sistemas Unix. El diseño del controlador en el entorno Linux tiene una idea simple, fácil operación y funciones poderosas. Sin embargo, admite muy pocas funciones y solo puede confiar en las funciones del kernel. Algunas operaciones comunes deben escribirse usted mismo, lo que dificulta la depuración.
Las llamadas al sistema son la interfaz entre el núcleo del sistema operativo y los programas de aplicación, y los controladores de dispositivos son la interfaz entre el núcleo del sistema operativo y el hardware de la máquina. El controlador del dispositivo protege los detalles del hardware de la aplicación. De esta manera, desde la perspectiva de la aplicación, el dispositivo de hardware es solo un archivo de dispositivo y la aplicación puede operar el dispositivo de hardware como un archivo normal. Los controladores de dispositivos son parte del kernel y se ejecutan en estado de kernel. Realiza las siguientes funciones:
1. Inicializar y liberar el dispositivo.
2. Transfiera datos desde el kernel al hardware y lea datos del hardware.
3. Lea los datos transmitidos por la aplicación en el archivo del dispositivo y envíe los datos solicitados por la aplicación.
4. Detectar y manejar errores en los equipos.
Existen tres tipos principales de archivos de dispositivos en el sistema operativo Linux: dispositivos de caracteres, dispositivos de bloques e interfaces de red. La principal diferencia entre dispositivos de caracteres y de bloques es que cuando se realiza una solicitud de lectura/escritura a un dispositivo de caracteres, la E/S del hardware real generalmente ocurre inmediatamente, mientras que con los dispositivos de bloques no ocurre. Utiliza una memoria del sistema como búfer, y cuando el proceso del usuario solicita que el dispositivo cumpla con la solicitud del usuario, devuelve los datos solicitados; de lo contrario, llama a la función de solicitud para realizar la operación de E/S real; Los dispositivos de bloque están diseñados principalmente para dispositivos más lentos, como discos, para evitar perder demasiado tiempo de CPU esperando.
Como se mencionó anteriormente, los procesos de usuario tratan con el hardware real a través de archivos de dispositivo. Cada archivo de dispositivo tiene sus atributos de archivo (c/b) que indican si es un dispositivo de caracteres o un dispositivo de bloque. Además, cada archivo tiene dos números de dispositivo, el primero es un número de dispositivo principal, que identifica al controlador, y el segundo es un número de dispositivo menor, que se utiliza para identificar diferentes dispositivos de hardware que usan el mismo controlador de dispositivo. Por ejemplo, si hay dos disquetes, se pueden distinguir por sus números de esclavo. El número de dispositivo principal del archivo del dispositivo debe ser coherente con el número de dispositivo principal solicitado cuando se registra el controlador del dispositivo; de lo contrario, el proceso del usuario no podrá acceder al controlador.
Finalmente, hay que mencionar que cuando el proceso del usuario llama al controlador, el sistema entra en el estado central y ya no tiene programación preventiva. En otras palabras, el sistema sólo puede continuar después de que regrese la subfunción que usted conduce.
Debido a que el proceso del usuario maneja el hardware a través del archivo del dispositivo, la forma de operar el archivo del dispositivo no es más que algunas llamadas al sistema, como abrir, leer, escribir, cerrar, etc. Tenga en cuenta que no es fopen ni fread, pero ¿cómo asociar las llamadas al sistema con los controladores?
¿Qué subsistemas de controladores deben dominar los ingenieros de controladores de Linux?
Controlador de tarjeta de red, controlador USB, varios controladores de bus (i2c, uart, spi, pci), controlador flash, etc.
Desarrollo de controladores y kernel de Linux, ¿hay algún libro clásico que recomiendes?
¿Has oído hablar de Linux Sikuquanshu? El diseño y la implementación del kernel de Linux, comprensión profunda del kernel de Linux, controladores de dispositivos Linux y análisis de escenarios del código fuente del kernel de Linux. Para las tres primeras obras maestras extranjeras, si dominas bien el inglés, lo mejor es leer las obras originales. El diseño y la implementación del kernel de Linux se centran en principios que son fáciles de entender. Una comprensión profunda del kernel de Linux tiene más detalles que la anterior.
¿Cómo compilar e instalar el controlador en Linux?
Hay dos controladores para compilar e instalar Linux, carga dinámica y carga estática.
Compile primero, compile y genere un archivo O o un archivo ko bajo el árbol del núcleo de guía.
En segundo lugar, copie el archivo O o ko generado en el directorio correspondiente, generalmente en /lib/module/kernel.
En tercer lugar, utilice el comando insmod para cargar y el comando rmmod para descargar la carga estática. ¿Cómo compilar e instalar el controlador bajo carga estática en Linux?