Tor
Ich versuche, einen einfachen Gerätetreiber unter Ubuntu zu schreiben. Ich möchte dies mit Eclipse (oder einer besseren IDE, die für die Treiberprogrammierung geeignet ist) tun. Hier ist der 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 );
Meine Bemühungen
Nach einigen Recherchen habe ich mich für die Entwicklung des Treibers für Eclipse CTD entschieden (obwohl ich immer noch nicht sicher bin, ob es Multithreading-Debugging-Tools unterstützt). Also ich:
- Installierte Ubuntu 11.04 Desktop x86 auf einer virtuellen VMWare-Maschine,
- Installiert
eclipse-cdt
und Linux-Header-2.6.38-8 mit Synaptic Package Manager, - Erstellt einen
C Project
benanntenTestDriver1
und kopierten Code darüber, - Der Standard-Build-Befehl wurde
make
in den folgenden benutzerdefinierten Build-Befehl geändert :
make -C /lib/modules/2.6.38-8-generic/build M=/home/isaac/workspace/TestDriver1
Das Problem
Ich erhalte eine Fehlermeldung, wenn ich versuche, dieses Projekt mit Eclipse zu erstellen. Hier ist das Protokoll für den Build:
**** Build der Konfiguration Debuggen für Projekt TestDriver1 ****
make -C /lib/modules/2.6.38-8-generic/build M = / home / isaac / workspace / TestDriver1 all
make: Verzeichnis '/usr/src/linux-headers-2.6.38-8-generic' eingeben
make: *** Keine Regel, um
vmlinux', needed by
alle zum Ziel zu machen '. Halt.make: Verlassen des Verzeichnisses '/usr/src/linux-headers-2.6.38-8-generic'
Interessanterweise erhalte ich keine Fehlermeldung, wenn ich dieses Projekt verwende, shell
anstatt es eclipse
zu erstellen. Zur Verwendung shell
erstelle ich einfach ein Makefile
Containing obj-m += TestDriver1.o
und verwende den obigen make
Befehl zum Erstellen.
Also muss etwas mit der Sonnenfinsternis nicht stimmen Makefile
. Vielleicht sucht es nach der vmlinux
Architektur (?) Oder etwas, während die aktuelle Architektur x86 ist. Vielleicht liegt es an VMWare?
Wie ich verstanden habe, würde eclipse
das automatische Erstellen der Makefiles und das manuelle Ändern zu zukünftigen Fehlern führen ODER die Verwaltung makefile
erschweren.
Wie kann ich dieses Projekt auf Eclipse kompilieren?
quelle
autotools
Plugin bald überprüfen . Kennen Sie eine bessere IDE für die Treiberprogrammierung? Glaubst du, ich (ein fauler VS-Benutzer, der keine Erfahrung mit Linux hat) kann das schaffenmakefile
? Ist esmakefile
in großen Projekten wirklich überschaubar?Ich bin auch neu in der Linux-Treiberprogrammierung. Ich habe festgestellt, dass es eine neue Möglichkeit gibt, Kernelmodule (die nicht im offiziellen Linux-Baum enthalten sind) namens DKMS bereitzustellen. Das Modul wird als Quelle installiert und DKMS übernimmt die Kompilierung für jeden Kernel. Dies bedeutet, dass das Makefile für-Modul manuell geschrieben wird und die Quelle für Autotools nicht enthalten ist.
http://linux.dell.com/dkms/
Aktualisiert...
DKMS wurde auf http://en.community.dell.com/techcenter/os-applications/w/wiki/2463.linux-projects.aspx verschoben
Diese Tutorials / kurze Einführung in DKMS (Links von der Dell-Projektseite): Artikel im Linux-Journal , Power Solutions- Artikel , Ottawa Linux Symposium- Artikel
DKMS für die schnelle Treiberbereitstellung. Zum Beispiel Kernelmodule, die DKMS in meinem Ubuntu-Computer verwenden:
Dies ist der Code, den ich zuvor geschrieben habe. Er könnte als DKMS Hello World hilfreich sein. https://github.com/sneetsher/RTD-DM5408-Driver-Port-for-Linux
quelle
1> Sie können es mit diesem Befehl versuchen
"make" -> "/ usr / bin / make"
2> Speichern Sie im Verzeichnis Ihren Hallo-Wort-Code und erstellen Sie den Dateinamen "Makefile".
quelle