Ich programmiere ein Kernelmodul in C, das Schwierigkeiten hat, auf IRQ-Beschreibungs-Array-Elemente zuzugreifen und alle Aktionsnamen dieser Elemente anzuzeigen.
Am Anfang dachte ich, dass diese irq_desc Array ist sonething wie ein Makro, aber nach dem Kompilieren ich verstanden, es ist nicht. Dann habe ich die Funktion for_each_irq_desc(irq, desc) verwendet, aber dieses Mal wurde eine Warnung ausgegeben:
WARNING: "irq_to_desc" [/home/samet/Masaüstü/Assignment3/Ass-1.ko] undefiniert!
und nach dieser Warnung habe ich versucht, das Modul in den Kernel zu insmoden, aber diesmal kam eine Fehlermeldung:
insmod: Fehler beim Einfügen von './Ass-1.ko': -1 Unbekanntes Symbol im Modul
Danach habe ich alle Headerdateien eingebunden, die ich für diesen Prozess für relevant halte, aber es hat sich nichts geändert.
Da es sehr kurz ist, füge ich den Code bei:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/irq.h>
#include <linux/irqdesc.h>
#include <linux/irqnr.h>
struct task_struct* p;
struct irq_desc* irqElement;
int irq, desc;
static int __init ass_1_init(void)
{
printk(KERN_INFO "Ass-1 module is starting...\n");
for_each_process(p){printk("%d\t%s\n", p->pid, p->comm);}
for_each_irq_desc(irq, irqElement){printk("%p\n", irqElement);}
return 0;
}
static void __exit ass_1_exit(void)
{
printk(KERN_INFO "Ass-1 module is finishing...\n");
}
module_init(ass_1_init);
module_exit(ass_1_exit);