Objectif
J'essaie d'écrire un pilote de périphérique simple sur Ubuntu. Je veux le faire en utilisant Eclipse (ou un meilleur IDE adapté à la programmation du pilote). Voici le code:
#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 );
Mon effort
Après quelques recherches, j'ai décidé d'utiliser Eclipse CTD pour développer le pilote (même si je ne sais toujours pas s'il prend en charge les outils de débogage multithread). Donc je:
- Installé Ubuntu 11.04 desktop x86 sur une machine virtuelle VMWare,
- Installés
eclipse-cdt
et linux-headers-2.6.38-8 utilisant Synaptic Package Manager, - Créé un code
C Project
nomméTestDriver1
et copié-collé dessus, - Modification de la commande de génération par défaut,, en la commande de
make
génération personnalisée suivante:
make -C /lib/modules/2.6.38-8-generic/build M=/home/isaac/workspace/TestDriver1
Le problème
Je reçois une erreur lorsque j'essaie de créer ce projet à l'aide d'Eclipse. Voici le journal de la construction:
**** Construction de la configuration Debug pour le projet TestDriver1 ****
make -C /lib/modules/2.6.38-8-generic/build M = / home / isaac / workspace / TestDriver1 all
make: Entrer dans le répertoire '/usr/src/linux-headers-2.6.38-8-generic'
make: *** Pas de règle pour viser
vmlinux', needed by
tous '. Arrêtez.make: Quitter le répertoire '/usr/src/linux-headers-2.6.38-8-generic'
Fait intéressant, je ne reçois aucune erreur lorsque j'utilise shell
au lieu de eclipse
construire ce projet. Pour l'utiliser shell
, je crée juste un Makefile
contenant obj-m += TestDriver1.o
et j'utilise la make
commande ci-dessus pour construire.
Donc, quelque chose ne va pas avec l'éclipse Makefile
. Peut-être qu'il cherche l' vmlinux
architecture (?) Ou quelque chose alors que l'architecture actuelle est x86. C'est peut-être à cause de VMWare?
Si j'ai bien compris, la eclipse
création automatique des makefiles et leur modification manuelle entraîneraient des erreurs à l'avenir OU rendraient la gestion makefile
difficile.
Alors, comment puis-je compiler ce projet sur Eclipse?
la source
autotools
bientôt le plugin. Connaissez-vous un meilleur IDE pour la programmation des pilotes? Pensez-vous que je (un utilisateur VS paresseux qui n'a aucune expérience de Linux) puisse gérermakefile
? Est-cemakefile
vraiment gérable dans les grands projets?Je suis nouveau aussi dans la programmation des pilotes Linux, j'ai trouvé qu'il y avait une nouvelle façon de déployer les modules du noyau (qui ne sont pas dans l'arborescence Linux officielle) appelée DKMS. Le module sera installé comme source et DKMS se chargera de le compiler pour chaque noyau. Cela signifie que le Makefile pour le module sera écrit manuellement et sa source ne sera pas incluse pour les autotools.
http://linux.dell.com/dkms/
mise à jour...
DKMS est passé à http://en.community.dell.com/techcenter/os-applications/w/wiki/2463.linux-projects.aspx
Cette tutorials / introduction rapide à DKMS (liens de Dell page du projet): article Linux Journal , papier Power Solutions , Ottawa Linux Symposium papier
DKMS utilisé pour le déploiement rapide des pilotes. Par exemple, les modules du noyau utilisant DKMS sur ma machine Ubuntu:
Ceci est le code que j'ai écrit auparavant, il pourrait être utile en tant que DKMS Hello World. https://github.com/sneetsher/RTD-DM5408-Driver-Port-for-Linux
la source
1> vous pouvez essayer avec cette commande
"make" -> "/ usr / bin / make"
2> dans le répertoire stockez votre code de mot bonjour, créez le nom de fichier "Makefile"
la source