Red de conocimiento informático - Computadora portátil - 6. Descripción general del controlador LCD de Linux

6. Descripción general del controlador LCD de Linux

Entra: ¿Cómo controla una aplicación un monitor LCD?

? Sabemos que la interfaz de llamada de la aplicación no es más que abrir/leer/escribir... y luego finalmente se aplica al dispositivo de hardware a través del controlador. Tomando los dispositivos de caracteres como ejemplo, para los desarrolladores de controladores, se implementan las funciones coincidentes drv_open/drv_read/drv_write en la capa del controlador llamada por el programa de aplicación, proporcionando un canal para que la secuencia de la capa de aplicación opere el dispositivo de hardware real. Entonces, ¿qué pasa con los controladores LCD? Primero comprendamos dos conceptos muy importantes.

? La función del controlador LCD es controlar la señal de accionamiento para controlar el LCD. Los usuarios sólo necesitan completar la configuración y mostrar el controlador leyendo y escribiendo una serie de registros. En el proceso de impulsar el diseño de LCD, lo primero es configurar el controlador LCD, y el paso más importante en la configuración del controlador LCD es la especificación del frame buffer. El contenido que el usuario desea mostrar se lee del búfer y se muestra en la pantalla. El tamaño del búfer de fotogramas está determinado por la resolución de la pantalla y el número de colores de la pantalla. La implementación del frame buffer del controlador es el foco de todo el proceso de desarrollo del controlador.

? El frame buffer es una interfaz de controlador que aparece en Linux 2.2.xx y versiones posteriores del kernel. Esta interfaz abstrae el dispositivo de visualización en un área de dispositivo de frame buffer. El frame buffer proporciona una abstracción para dispositivos de hardware de gráficos. Representa algunos dispositivos de hardware de video y permite que el software de aplicación acceda a dispositivos de hardware de gráficos a través de una interfaz bien definida. De esta manera, el software no necesita saber nada sobre el controlador de hardware subyacente (como los registros de hardware). Permite que las aplicaciones de capa superior realicen directamente operaciones como lectura, escritura y control de E/S en el búfer de visualización en modo gráfico. Se puede acceder al dispositivo a través de un nodo de dispositivo dedicado, como /dev/fb*. Los usuarios pueden considerarlo como una imagen de la memoria de la pantalla. Después de asignarla al espacio de direcciones del proceso, se pueden realizar operaciones de lectura y escritura, y las operaciones de lectura y escritura se pueden reflejar en la pantalla LCD.

? Frame Buffer es una interfaz proporcionada por Linux para dispositivos de visualización. Es un dispositivo que abstrae la memoria de visualización y permite que las aplicaciones de capa superior lean y escriban directamente el búfer de visualización en modo gráfico. Los usuarios no necesitan preocuparse por la ubicación de la memoria de video física, el mecanismo de paginación y otros detalles específicos, todos estos se completan mediante el controlador del dispositivo Frame Buffer. Los dispositivos frame buffer son dispositivos de caracteres.

? El Frame Buffer del sistema Linux básicamente solo proporciona una abstracción de hardware para dispositivos gráficos. Desde la perspectiva de los desarrolladores, Frame Buffer es un caché de visualización. Escribir datos en un formato específico en el caché de visualización significa generar contenido. a la pantalla.

Debido a la abstracción de frambuffer, las aplicaciones pueden acceder al hardware a través de interfaces definidas. Por lo tanto, la aplicación no necesita considerar operaciones de bajo nivel (nivel de registro). Las aplicaciones generalmente acceden a los archivos del dispositivo en el directorio /dev, como /dev/fb*.

El frambuffer en el kernel está en: drivers/video/fbmem.c (fb: frame buffer)

(1) Crear dispositivo de caracteres "fb", FB_MAJOR=29, major El número de dispositivo es 29.

(2) Cree una clase, pero no cree un nodo de dispositivo, porque el controlador LCD debe registrarse antes de que haya un nodo de dispositivo

2.1 La función fb_open es; de la siguiente manera:

(1) registrado_fb[fbidx] Esta matriz también es la estructura fb_info, donde fbidx es igual al número de identificación del dispositivo secundario. Obviamente, esta matriz es para guardar la información de cada uno de nuestros LCD. drivers;

2.2 La función fb_read es la siguiente:

Se puede encontrar en las funciones .open y .read que todas dependen de la estructura de información del frame buffer fb_info, que es obtenido de la matriz protected_fb[fbidx] Esta matriz almacena la información de cada uno de nuestros controladores LCD.

Se puede ver que fbmem.c proporciona algunas cosas abstractas y, en última instancia, se basa en la matriz registrada_fb.

Además de registrar fb_info, este Register_framebuffer() también crea un nodo de dispositivo.

Tome s3c2410fb.c como ejemplo para analizar la implementación del controlador.

Al tratarse de un modelo de controlador de dispositivo de bus, lo que nos preocupa es su función de sonda.

Ver la escritura del controlador aquí es generalmente claro:

Adjunto:

Proceso y sincronización de la pantalla LCD:

1. La visualización comienza desde el primer punto de la primera línea en la esquina superior izquierda de la pantalla y se muestra en la pantalla LCD un punto a la vez. El intervalo de tiempo entre puntos es VCLK (señal de reloj de píxeles que finaliza cuando se visualiza). llega al extremo derecho de la pantalla (Línea), la visualización de esta línea corresponde a HSYNC (señal de sincronización horizontal) en el diagrama de tiempo

2. A continuación, el puntero de visualización regresa a la izquierda. lado de la pantalla y comienza a mostrarse desde la segunda línea, el puntero de visualización. La aguja tarda una cierta cantidad de tiempo en regresar desde el lado derecho de la primera fila al lado izquierdo de la segunda fila. A esto lo llamamos cambio de fila. .

3. Por analogía, el puntero de visualización se muestra línea por línea en la esquina inferior derecha del rectángulo antes de que se muestre una imagen (cuadro: cuadro). El tiempo de visualización de este cuadro depende del tiempo. diagrama Representado como VSYNC (señal de sincronización vertical).

Referencia:

/a/hongdy.org/www/linux/kernel/lcddriver