[Beijing Xunwei] i.MX6ULL Terminator Linux INPUT subsistema prueba de funcionamiento experimental

1 Compile el controlador

Se necesita un archivo Makefile como el programa de prueba de controladores del capítulo anterior, pero el valor de obj-m se cambia a key_input.o. El contenido del archivo Makefile es el siguiente:

KERNELDIR := /home/topeet/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga
CURRENT_PATH := $(shell pwd)
obj-m := key_input.o

build: kernel_modules
kernel_modules: 
        $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
        $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean

Primero, ingresamos dos comandos en la terminal (establecemos dos variables de entorno):

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

Luego, ejecute el comando "make" para compilar el módulo, y el archivo del módulo key_input.ko se generará después de que se complete la compilación.

2 Compile el programa de prueba de la aplicación

Ingrese el siguiente comando para compilar el programa de prueba de la aplicación: Una vez
arm-linux-gnueabihf-gcc -o key_input_test key_input_test.c
completada la compilación, se generará el archivo ejecutable key_input_test.

3 Ejecute la prueba

Inicie la placa de desarrollo, copie el archivo del módulo key_input.ko compilado y la aplicación key_input_test en el directorio /lib/modules/4.1.15 (compruebe si hay "/lib/modules/4.1.15" en el sistema de archivos raíz del board Directory, si no tiene uno, debe crearlo usted mismo. La placa de desarrollo utiliza el sistema de archivos busybox proporcionado en los datos del CD y los datos del CD "i.MX6UL Terminator CD data \ 08_development board system image \ 03_file system image \ 01_Busybox file system ”directorio). Antes de cargar los archivos del módulo del controlador, observe qué archivos están en el directorio / dev / input. El resultado se muestra en la Figura 3.1:
Inserte la descripción de la imagen aquí

Figura 3.1

Hay muchos eventos de eventos en el directorio / dev / input y luego ingrese el siguiente comando para cargar el módulo:

depmod
modprobe key_input

Una vez que el controlador se haya cargado correctamente, echemos un vistazo a los archivos en el directorio / dev / input. El resultado se muestra en la Figura 3.2:
Inserte la descripción de la imagen aquí

Figura 3.2

Se puede ver que hay un archivo event3 adicional, por lo que / dev / input / event3 es el archivo de dispositivo correspondiente al controlador que registramos. Luego, la aplicación key_input_test obtiene la información del evento de entrada leyendo el archivo de dispositivo / dev / input / event3. El comando de prueba es el siguiente:
./key_input_test /dev/input/event3
Presione la tecla KEY0 en la placa de desarrollo, hay un fenómeno en la Figura 3.3:
Inserte la descripción de la imagen aquí

Figura 3.3

Se puede ver que cuando presionamos o soltamos un botón en la placa de desarrollo, el contenido correspondiente saldrá en la terminal, indicándonos qué botón se presionó o soltó. En el kernel de Linux, KEY_0 es 11.
Además, también podemos probar la unidad sin usar la aplicación key_input_test. Puede usar directamente el comando hexdump para ver el contenido del archivo / dev / input / event3 e ingresar el siguiente comando:
`` `hexdump / dev / input / event3''``Presione el
desarrollo El botón KEY0 en la placa tiene el fenómeno que se muestra en la Figura 3.4:
Inserte la descripción de la imagen aquí

Figura 3.4

La imagen de arriba es el valor de datos del evento original del tipo input_event, expresado en hexadecimal, el significado de estos datos originales es el siguiente:

/*****************input_event 类型********************/ 
/* 编号 */  /* tv_sec */  /* tv_usec */  /* type */  /* code */  /* value */ 
0000000     1029 5d5e   2c16 0008     0001       000b     0001 0000
0000010     1029 5d5e   2c16 0008     0000       0000     0000 0000
0000020     1029 5d5e   761f 000a     0001       000b     0000 0000
0000030     1029 5d5e   761f 000a     0000       0000      0000 0000

type es el tipo de evento, el valor del evento EV_KEY es 1 y el valor del evento EV_SYN es 0. Por lo tanto, la primera línea representa el evento EV_KEY y la segunda línea representa el evento EV_SYN. code es el código de evento, es decir, el número de clave. El número de clave de KEY_0 es 11, y el número hexadecimal correspondiente es 0xb. Por lo tanto, la primera línea representa el evento de clave de KEY_0 y el último valor es el valor de clave. 1 significa presionar, que es 0 significa liberar.
En resumen, el significado del valor del evento original en la figura anterior es el siguiente:
Línea 1, el evento de pulsación de tecla (KEY_0).
Línea 2, evento de sincronización EV_SYN, porque cada vez que se informa un evento clave, se debe informar un evento EV_SYN sincrónicamente
.
En la línea 3, el evento de liberación de la clave (KEY_0).
Línea 4, evento de sincronización EV_SYN, igual que la línea 2.

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/BeiJingXunWei/article/details/112213266
Recomendado
Clasificación