2016-07-25 11 views
0

Ich versuche, einen Schalter/GPIO-Interrupt hinzuzufügen. Ich möchte es als Teil des Kernel-Quellbaums schreiben. Nach dem Erstellen des Kernel-Images und der Bereitstellung auf meiner benutzerdefinierten Karte muss es in proc/interrupts erscheinen. Ich habe das Modul bereits geschrieben und es funktioniert, wenn insmod. Anstatt separat zu kompilieren, möchte ich, dass es ein Teil meines Kernbaums ist. Was sind die Schritte zum Hinzufügen der IRQ zur Kernel-Quelle.Hinzufügen von Interrupt-Service-Routine im Kernel

+0

Warum ist es ein Off-Thema, das ich nicht kenne. Ich habe erwähnt, dass ich einen Arbeitscode habe, aber ich muss ihn als Teil der Quelle hinzufügen. –

Antwort

1

Eigentlich, wenn Sie das Modul in den Kernel-Baum geschrieben haben, ist es ziemlich einfach:

sagen Hier können Sie den Quellcode in Treiber Verzeichnis abgelegt, so dass die Hierarchie sieht wie folgt aus: drivers/hallo Kconfig

obj-$(CONFIG-HELLO) += hello/ 

In drivers/Kconfi: Make-Datei hello.c

In drivers/Make-Datei sollten Sie folgendes hinzufügen g sollten Sie Folgendes hinzu:

source "drivers/hello/Kconfig" 

Beispielcode für die Fahrer/hallo/Kconfig:

config HELLO 
tristate "Hello world module" 
default n 
help 
    Enable Hello world module support 

Beispielcode für die Fahrer/hallo/Makefile:

obj-$(CONFIG_HELLO) += hello.o 

Beispielcode für die Fahrer /hello.c:

#include <linux/module.h> 
#include <linux/moduleparam.h> 

... 
... 

static int __init hello_init(void) 
{ 
    ... 
} 

static void __exit hello_exit(void) 
{ 
    ... 
} 

module_init(hello_init); 
module_exit(hello_exit); 

MODULE_AUTHOR("Obi One Kenoby"); 
MODULE_DESCRIPTION("Hello Driver"); 
MODULE_LICENSE("GPL"); 
MODULE_VERSION("1.0"); 

Nun sollten Sie das Modul hello in make menuconfig sehen können - wählen Sie 'm' für Modul und '*' für eingebaut. Die Module module_init/module_exit funktionieren mit beiden Optionen.

+0

Hallo, ich habe das gleiche getan und ich bin in der Lage, im menuconfig nd in der Lage zu sehen, es ohne irgendwelche Probleme zu kompilieren. Das Problem ist nun, dass der Eintrag .ko in modue.order und module.builtin nicht vorhanden ist. Wenn es keinen Eintrag in der Datei main module.builtin gibt, dann ist die .ko-Datei nicht Teil meines endgültigen Kernel-Images, oder? –

+0

Sie werden keine .ko-Datei sehen, da sie jetzt in den Kernel eingebaut ist. Wenn Sie hello.o sehen, kompiliert es gut - fügen Sie einfach einen pr_err() in Ihre Probe-Funktion ein, um zu sehen, ob sie aufgerufen wird. – tomereli

+0

Ich kann den Eintrag in/proc/interrupts nicht sehen –