Objetivo
Estoy tratando de escribir un controlador de dispositivo simple en Ubuntu. Quiero hacer esto usando Eclipse (o un IDE mejor que sea adecuado para la programación del controlador). Aquí está el código:
#include <linux/module.h>
static int __init hello_world( void )
{
printk( "hello world!\n" );
return 0;
}
static void __exit goodbye_world( void )
{
printk( "goodbye world!\n" );
}
module_init( hello_world );
module_exit( goodbye_world );
Mi esfuerzo
Después de investigar un poco, decidí usar Eclipse CTD para desarrollar el controlador (aunque todavía no estoy seguro de si es compatible con herramientas de depuración de subprocesos múltiples). Asique:
- Instalé Ubuntu 11.04 Desktop x86 en una máquina virtual VMWare,
- Instalado
eclipse-cdt
y linux-headers-2.6.38-8 usando Synaptic Package Manager, - Creé un código anterior con
C Project
nombreTestDriver1
y copiado, - Cambió el comando de compilación predeterminado
make
, al siguiente comando de compilación personalizado:
make -C /lib/modules/2.6.38-8-generic/build M=/home/isaac/workspace/TestDriver1
El problema
Recibo un error cuando intento construir este proyecto usando eclipse. Aquí está el registro de la compilación:
**** Compilación de configuración de depuración para el proyecto TestDriver1 ****
make -C /lib/modules/2.6.38-8-generic/build M = / home / isaac / workspace / TestDriver1 all
make: Entrando en el directorio '/usr/src/linux-headers-2.6.38-8-generic'
make: *** Ninguna regla para hacer objetivo a
vmlinux', needed by
todos '. Detener.make: Saliendo del directorio '/usr/src/linux-headers-2.6.38-8-generic'
Curiosamente, no obtengo ningún error cuando lo uso en shell
lugar de eclipse
construir este proyecto. Para usar shell
, solo creo un Makefile
contenedor obj-m += TestDriver1.o
y uso el make
comando anterior para construir.
Entonces, algo debe estar mal con el eclipse Makefile
. Tal vez está buscando la vmlinux
arquitectura (?) O algo mientras la arquitectura actual es x86. ¿Quizás es por VMWare?
Como entendí, eclipse
crea los archivos MAKE automáticamente y modificarlos manualmente causaría errores en el futuro O makefile
dificultaría la administración .
Entonces, ¿cómo puedo compilar este proyecto en eclipse?
fuente
autotools
complemento pronto. ¿Conoces algún IDE mejor para la programación del controlador? ¿Crees que yo (un usuario vago de VS que no tengo experiencia en Linux) puedo manejarlomakefile
? ¿Esmakefile
realmente manejable en grandes proyectos?También soy nuevo en la programación de controladores de Linux, descubrí que hay una nueva forma de implementar módulos de kernel (que no están en el árbol oficial de Linux) llamada DKMS. El módulo se instalará como fuente y DKMS se encargará de compilarlo para cada núcleo. Significa que el Makefile para el módulo se escribirá manualmente y su fuente no se incluirá para las herramientas automáticas.
http://linux.dell.com/dkms/
actualizado...
DKMS se trasladó a http://en.community.dell.com/techcenter/os-applications/w/wiki/2463.linux-projects.aspx
Estos tutoriales / introducción rápida a DKMS (enlaces desde la página del proyecto de Dell): artículo de Linux Journal , documento de Power Solutions , documento de Ottawa Linux Symposium
DKMS utilizado para la implementación rápida de controladores. Por ejemplo, módulos de kernel que usan DKMS en mi máquina Ubuntu:
Este es el código que he escrito antes, podría ser útil como DKMS Hello World. https://github.com/sneetsher/RTD-DM5408-Driver-Port-for-Linux
fuente
1> puedes probar con este comando
"make" -> "/ usr / bin / make"
2> en el directorio almacena tu código de palabra de saludo, nombre de archivo de creación "Makefile"
fuente