Construir entorno de desarrollo de controlador de dispositivo Linux

  
 

Después de dos semanas de exploración, finalmente obtuve una comprensión preliminar del desarrollo del controlador de dispositivo Linux. A continuación, se presenta un resumen del entorno de desarrollo del controlador de dispositivo Linux para facilitar futuras consultas, pero también para los mismos principiantes. Un poco de ayuda.

Cuando entras en contacto por primera vez con un controlador de dispositivo Linux, los principiantes a menudo no entienden cómo compilar controladores, y mucho menos compilar en el kernel o las pruebas de carga. Por lo general en Internet para encontrar el controlador holamundo más simple, y luego dichas etapas estrictamente de acuerdo con el compilador de línea, también, y obtener una gran cantidad de errores nunca había visto, y mucho menos para resolver el problema de acuerdo con el mensaje de error, y muchos La gente no sabe cómo bajar cuando llegan aquí. He estado atrapado aquí hace mucho tiempo, hace diez días. Ahora sé que lo he escrito, y es útil para algunos de mis compañeros practicantes.

Un entorno de desarrollo de controlador de dispositivo Linux básico consiste en una máquina host y una máquina de destino. La máquina host se usa para impulsar el trabajo de desarrollo. La máquina de destino se usa para ejecutar y probar el host del controlador de dispositivo. Debe tener herramientas de desarrollo (gcc, gdb, make, etc.) y código fuente de linux (la versión debería corresponder al kernel de Linux en la máquina de destino), y la máquina de destino puede ejecutar Linux. Debido a que los pasos son diferentes, lo siguiente se divide en dos situaciones comunes: desarrollo general de controladores de dispositivos Linux y desarrollo integrado de controladores de dispositivos Linux para describir la construcción del entorno y la compilación de controladores:

(1) Desarrollo ordinario de controladores de dispositivos Linux

normal de Linux Linux incrustado distingue principalmente (se refiere en general a la uClinux), en el que el desarrollo del anfitrión y de destino puede ser un anfitrión, es decir, se carga a continuación el desarrollo del compilador en la máquina en la máquina Ejecutar (el controlador de dispositivo de Linux también se puede compilar directamente en el kernel, pero, por conveniencia del trabajo de desarrollo, generalmente se usa carga dinámica), por supuesto, también pueden ser dos hosts, si son dos hosts, para garantizar el código fuente de Linux en el host El número de versión es el mismo que la versión del kernel de Linux en la máquina de destino. Los pasos para desarrollar controladores de dispositivo Linux comunes son los siguientes:

Instale las herramientas de desarrollo en la máquina host y descargue el código fuente de Linux (requiere que el número de versión sea el mismo que la versión del kernel de Linux en la máquina de destino). herramientas de desarrollo son gcc, gdb, marca, etc. Estas herramientas se instalan de forma predeterminada en el RedHat o fc se puede instalar mediante el comando siguiente en el Debian o Ubuntu: apt-get install código fuente acumulación essentiallinux se pueden obtener de varias maneras : ir directamente a la fuente de www.kernel.org descargar herramientas de gestión de paquetes, se puede descargar a través del siguiente comando en el Debian y Ubuntu, apt-get install (número de versión) linux-fuente-, después de descargar los archivos en /usr /src directorio, el directorio puede ser descomprimido después

para extraer el directorio /usr /src /directorio de origen, realice los siguientes pocos comandos en el (número de versión) linux-fuente- directorio: hacer guiones preparemake oldconfigmake

escribir controladores Linux a un simple hola.c, por ejemplo, hola.c dice lo siguiente: # include " Linux /init.h " # include " Linux /module.h "

static int hello_init (void) {printk (KERN_ALERT " Hello World linux_driver_module \\ n "); return 0;}

estática hello_exit (void) {printk (KERN_ALERT " goodbey linux_driver_module \\ n " );}

m odule_init (hello_init); module_exit (hello_exit); MODULE_LICENSE (" GPL "); MODULE_AUTHOR (" lpj ");

Escribir el Makefile, un ejemplo es el siguiente, que los cambios de parámetros de acuerdo con la situación real: # muestra de director moduleobj-m: = = hello.oKDIR /usr/src/linux-source-2.6.24/

todo: $ (MAKE) -C $ (KDIR) m = $ (PWD)

.PHONY: cleanclean: rm -f * .mod.c * * .mod.o .ko * * .o .tmp_versions

compilar y ejecutar hola.c hacer en el directorio en el Makefile puede, archivo de generación hello.ko catálogo compilado actualmente cargado y probado: cargado usando insmod o modprobe comando para lograr, como se realizó en la ruta actual siguiente código: Hola modprobe o insmod hello.ko Nota, si se carga el núcleo, entonces el terminal virtual no vamos a ver la información de impresión del núcleo, debido a que el núcleo no se imprime la salida de información a un terminal virtual, pero la salida a archivos en /proc /kmsg, por lo que puede ver la información del núcleo de la siguiente manera: se habrían requerido cat /proc /kmsg para imprimir Ctrl-C para terminar manualmente dmesg o dmesg

Copyright © Conocimiento de Windows All Rights Reserved