El análisis subsistema de entrada de Linux

  
 


subsistema de entrada Linux proporciona el dispositivo de entrada de cuadro de la unidad, tal como un ratón, un teclado, un dispositivo de entrada del panel táctil pertenece. documentación de Linux en cuanto subsistema de entrada en Documentation /directorio de entrada, código del núcleo de entrada y input.c input.h en. En este artículo no se refiere a los detalles
implementaciones de entrada, tales input_dev- > Grab, y una temporización de los eventos clave. 1.
input_handle, input_handler, input_dev
input_handle, input_handler, subsistema de entrada es input_dev las tres estructuras de datos más importantes.
l input_handler aplicación superior para la adquisición de los eventos de entrada. nodo superior abierto dispositivo de entrada de dispositivo de aplicación, entonces el nodo lee y escribe información para obtener el movimiento del ratón, la información del teclado, o similares. Aquí la función de operación de archivo se proporciona por un input_handler nodo del dispositivo.
l input_dev representa el dispositivo específico, tal como un ratón, teclado, y así sucesivamente.
l Para un Linux equipo
, puede estar unido a más de un ratón, varios teclados. Cada ratón puede controlar el movimiento del cursor, cada teclado se puede utilizar normalmente. Este subsistema de entrada, configurado como una pluralidad de input_dev input_handle asociado, capaz de adquirir simultáneamente una pluralidad de mensajes de entrada desde input_dev. Mientras tanto, el dispositivo de Linux puede tener una pluralidad de nodos de entrada simultáneamente asociados con un dispositivo en particular, de modo que cualquier aplicación por un nodo de dispositivo, toda la información de entrada tal como un ratón Keyihuode dispositivo específico, teclado o similar. Así, entre input_dev y input_handler se asocia con muchas relaciones, y estas relaciones se representan por input_handle.
input_handle establece una asociación entre
1.1 manipulador con el dev contiene un puntero input_dev, y una input_handler puntero, que son capaces de establecer una asociación entre un controlador y dev-uno. En input_handler, hay una lista de todos h_list input_handle, y el punto en el mango asociado controlador mediante el cual se puede encontrar toda la dev asociada con el handler. Del mismo modo, en input_dev, también hay una lista de todos h_list input_handle, señalando el manejador asociado dev puede encontrar todos ellos relacionados con el mango prog. Y entre las dos listas por input_handle, input_handler y input_dev establecer una estructura de red compleja.
entonces, las reglas de asociación entre input_handler y input_dev lo que es? Es decir, en qué circunstancias que asociar, y cuando no asociarse? Esto requiere un mecanismo de adaptación entre controlador y dev.
input_handler tiene dos punteros, id_table y la lista negra, que lista negra es una lista negra, todo a juego dev se verá obligado a filtrar, y cualquiera y id_table en un partido que se dev asociada con el handler.
const struct input_device_id * id_table;
const struct input_device_id * lista negra;
struct {input_device_id
kernel_ulong_t banderas;
__u16 BusType;
__u16 proveedor;
__u16 producto;
__ versión u16;
kernel_ulong_t evbit [INPUT_DEVICE_ID_EV_MAX /BITS_PER_LONG + 1];
kernel_ulong_t keybit [INPUT_DEVICE_ID_KEY_MAX /BITS_PER_LONG + 1];
kernel_ulong_t relbit [INPUT_DEVICE_ID_REL_MAX /BITS_PER_LONG + 1];
kernel_ulong_t absbit [INPUT_DEVICE_ID_ABS_MAX /BITS_PER_LONG + 1];
kernel_ulong_t mscbit [INPUT_DEVICE_ID_MSC_MAX /BITS_PER_LONG + 1];
kernel_ulong_t ledbit [INPUT_DEVICE_ID_LED_MAX /BITS_PER_LONG + 1];
kernel_ulong_t sndbit [INPUT_DEVICE_ID_SND_MAX /BITS_PER_LONG + 1];
kernel_ulong_t ffbit [INPUT_DEVICE_ID_FF_MAX /BITS_PER_LONG + 1];
kernel_ulong_t swbit [INPUT_DEVICE_ID_SW_MAX /BITS_PER_LONG + 1];
kernel_ulong_t driver_info;
};
en este cuerpo estructural, banderas contiene algunas máscaras:
#define INPUT_DEVICE_ID_MATCH_BUS 1

Copyright © Conocimiento de Windows All Rights Reserved