Cómo escribir un controlador de dispositivo para el sistema operativo Linux
La idea es completamente similar a la de otros sistemas Unix, pero su controlador en un entorno DOS o Windows es muy grande.
Diferencia. Diseñar un controlador en el entorno Linux es simple, fácil de operar y potente. Sin embargo, admite muy pocas funciones y solo puede depender de funciones del kernel. Algunas operaciones de uso común deben escribirse y ajustarse usted mismo.
No es conveniente intentarlo. En las últimas semanas he estado escribiendo un controlador para una tarjeta multimedia desarrollada en mi laboratorio.
He adquirido algo de experiencia y quiero compartirla con los entusiastas de Linux. Por favor corríjame si hay algún problema.
El siguiente texto proviene principalmente de khg, Writing Linux Device Drivers de johnsonm,
Guía de ensamblaje en línea de Brennan, Linux A-Z y Tsinghua Forum.
Algunos datos del controlador del dispositivo. Algunos de estos datos están desactualizados y otros aún contienen errores.
Modificado según los resultados de mis propias pruebas.
1. El concepto de controlador de dispositivo Linux
La llamada al sistema es la interfaz entre el núcleo del sistema operativo y el programa de aplicación, y el controlador del dispositivo es el sistema operativo.
La interfaz entre el kernel y el hardware de la máquina. El controlador del dispositivo protege la aplicación de los detalles del hardware, por lo que, desde la perspectiva de la aplicación, el dispositivo de hardware es solo un archivo de dispositivo y la aplicación puede funcionar como un archivo normal.
El controlador del dispositivo es parte del kernel y completa 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.
Hay dos tipos principales de archivos de dispositivo en el sistema operativo Linux, uno es dispositivo de caracteres y el otro es
dispositivo de bloque. La principal diferencia entre los dispositivos de caracteres y los dispositivos de bloques es que cuando se realiza una solicitud de lectura/escritura a un dispositivo de caracteres, en realidad lo que suele ocurrir a continuación es la E/S de hardware, pero no con los dispositivos de bloques. Utiliza la memoria del sistema como búfer.
Cuando un proceso de usuario solicita a un dispositivo que lea/escriba, primero mira el contenido del buffer. Si los datos en el búfer
Si satisfacen la solicitud del usuario, devolverá los datos solicitados. Si no puede, llama a la función de solicitud para realizar el trabajo real.
Los dispositivos de bloque están diseñados principalmente para dispositivos más lentos, como discos, para evitar consumir demasiado tiempo de CPU.
Ven y espera.
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), lo que indica si es un dispositivo de carácter o fuerte. Además, cada archivo tiene dos configuraciones.
Número de respaldo, el primero es el número de dispositivo mayor, que identifica al controlador, y el segundo es el número de dispositivo esclavo, que identifica al mismo.
Los diferentes dispositivos de hardware controlados por el dispositivo, como dos disquetes, se pueden distinguir por sus números de dispositivo menores.
Ellos. El número principal del archivo del dispositivo debe ser el mismo que el número principal aplicado por el controlador del dispositivo cuando se registró.
Consistente; 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
programa de forma preventiva. En otras palabras, el sistema no puede hacer nada más hasta que regrese la subfunción que usted conduce.
Si su controlador está en un bucle infinito, desafortunadamente tendrá que reiniciar la máquina, entonces