Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Zweiter Versuch: Was ist an diesem Modul falsch?

11 views
Skip to first unread message

Christian Luther

unread,
Feb 24, 2002, 12:01:30 PM2/24/02
to
Da auf meinen alten Thread noch immer keine Antowort da ist, versuche ich es
auf spammende und bohrende Weise noch einmal:

Folgendes Modul soll eine Meldung ausgeben, wenn der Parallelport einen
Interrupt auslöst:

--- ackint.c ---
[includes gesnippt]

#define BASE 0x278
#define IRQ 5

void intr_handler(int irq, void *dev_id, struct pt_regs *regs) {
printk("ACKINT: Interrupt handler called\n");
}

int init_module(void) {
printk("ACKINT: Loading...\n");
printk("ACKINT: Trying Interrupt %i...\n", IRQ);

if(request_irq(IRQ, intr_handler, 0, "ACKINT", NULL)) {
printk("ACKINT: Error while installing interrupt handler\n");
return -1;
} else {
outb(0x10, BASE+2);
printk("ACKINT: Interrupt handler installed\n");
}

printk("ACKINT: Succesfully loaded\n");
return 0;
}

void cleanup_module(void) {
free_irq(IRQ, NULL);
printk("ACKINT: Interrupt freed\n");
printk("ACKINT: Removed\n");
}
--- ende ---

Dieses Programm kompiliert sich brav, lässt sich ohne Probleme inserten,
/proc/interrupts zeigt mir, dass der IRQ von meinem Modul belegt ist,
Interrupt und BASE sind korrekt, meine Testschaltung funktioniert, ich habe
mit einem anderen Programm die Eingänge überprüft und sie liefern das
korrekte Ergebnis. Die Meldung wird allerdings nicht ausgegeben. Wenn ihr
nicht wisst, woran es liegt, sagt mir wenigstens, dass der Code richtig ist,
solange ihr euch dabei sicher seid.

Danke im Vorraus...


--
www.luthersworld.de - Bald...


Christian Luther

unread,
Feb 24, 2002, 12:42:10 PM2/24/02
to
'tschuldigung, habe den Fehler gerade gefunden. Das Interface scheint
scheinbar keine Interrupts auslösen zu können oder ich habe ihn falsch
eingestellt. Wenn ich es am Interface des Motherboards ausprobiere, geht es.
Aber eine Frage hätte ich: Wann genau wird der Interrupt immer ausgelöst?
Linux scheint sich da nicht ganz sicher zu sein. Normalerweise sollte bei
Low-To-High an ACK vom Parallelport den interrupt auslösen, aber die Meldung
erscheint bei L>H und bei H>L, und das nicht allzu konsequent. Manchmal
erscheinen pro Tastendruck 3 Meldungen. Ist mein Taster nur schlecht und
wackelkontaktet ein wenig?


Felix von Leitner

unread,
Feb 24, 2002, 1:02:29 PM2/24/02
to
Thus spake Christian Luther (hu...@luthersworld.de):

> Da auf meinen alten Thread noch immer keine Antowort da ist, versuche ich es
> auf spammende und bohrende Weise noch einmal:

Meine Güte, hier ist keine Kernel Hacking Schule! Das ist halt
untrivial und es ist anstrengend genug, die eigenen Kernel Module
bugfrei zu kriegen. Wie kommst du darauf, daß hier a) jemand ist, der
dir überhaupt helfen kann und b) derjenige willens ist, das auch zu tun?
Es besteht kein Anspruch auf Hilfe im Usenet!

> Folgendes Modul soll eine Meldung ausgeben, wenn der Parallelport einen
> Interrupt auslöst:

Und wie kommst du da auf IRQ 5? Warum kopierst du nicht den Code von
parport_pc? Bist du sicher, daß da überhaupt ein Interrupt ausgelöst
wird? Bei mir ist der Parallelport z.B. auf IRQ 7. Als ich den
Parport zuletzt programmiert habe, hat man da einfach Sachen
reingeschrieben und Zurücklesen ging nicht. Ich vermute mal, daß man
die IRQ-Benutzung irgendwie aktivieren muß, die werden die ja wohl
optional gemacht haben wegen der Rückwärtskompatibilität.

Felix von Leitner

unread,
Feb 24, 2002, 1:08:12 PM2/24/02
to
Thus spake Christian Luther (hu...@luthersworld.de):
> 'tschuldigung, habe den Fehler gerade gefunden. Das Interface scheint
> scheinbar keine Interrupts auslösen zu können oder ich habe ihn falsch
> eingestellt. Wenn ich es am Interface des Motherboards ausprobiere, geht es.
> Aber eine Frage hätte ich: Wann genau wird der Interrupt immer ausgelöst?

Was hat das mit Unix-Programmierung zu tun?

> Linux scheint sich da nicht ganz sicher zu sein. Normalerweise sollte bei
> Low-To-High an ACK vom Parallelport den interrupt auslösen, aber die Meldung
> erscheint bei L>H und bei H>L, und das nicht allzu konsequent. Manchmal
> erscheinen pro Tastendruck 3 Meldungen. Ist mein Taster nur schlecht und
> wackelkontaktet ein wenig?

Hast du da etwa keinen Prellschutz drin?

Sven Geggus

unread,
Feb 24, 2002, 3:38:58 PM2/24/02
to
Christian Luther <hu...@luthersworld.de> wrote:

> Aber eine Frage hätte ich: Wann genau wird der Interrupt immer ausgelöst?
> Linux scheint sich da nicht ganz sicher zu sein. Normalerweise sollte bei
> Low-To-High an ACK vom Parallelport den interrupt auslösen, aber die Meldung
> erscheint bei L>H und bei H>L, und das nicht allzu konsequent. Manchmal
> erscheinen pro Tastendruck 3 Meldungen. Ist mein Taster nur schlecht und
> wackelkontaktet ein wenig?

Schon mal was von Prellen gehoert?

Entweder ein flipflop einsetzen oder softwaremaessig entprellen, indem Du
den Interrupt am Interface im Interrupthandler deaktivierst und erst nach
einem kurzen Delay wieder aktivierst. Ich meine mich erinnern zu koennen,
dass man den IRQ der parallelen Schnittstelle softwaremaessig ein und
ausschalten kann.

Sven

--
"Thinking of using NT for your critical apps?
Isn't there enough suffering in the world?"
(Advertisement of Sun Microsystems in Wall Street Journal)
/me is giggls@ircnet, http://geggus.net/sven/ on the Web

Christian Luther

unread,
Feb 27, 2002, 7:55:35 AM2/27/02
to
> Meine Güte, hier ist keine Kernel Hacking Schule! Das ist halt
> untrivial und es ist anstrengend genug, die eigenen Kernel Module
> bugfrei zu kriegen. Wie kommst du darauf, daß hier a) jemand ist, der
> dir überhaupt helfen kann und b) derjenige willens ist, das auch zu tun?
> Es besteht kein Anspruch auf Hilfe im Usenet!

In einer Newsgroup, wo viele Leute sind und wo meine Frage nicht OT ist, ist
die Chance ziemlich gross, dass mir jemand helfen kann...

> Und wie kommst du da auf IRQ 5? Warum kopierst du nicht den Code von
> parport_pc? Bist du sicher, daß da überhaupt ein Interrupt ausgelöst
> wird? Bei mir ist der Parallelport z.B. auf IRQ 7. Als ich den
> Parport zuletzt programmiert habe, hat man da einfach Sachen
> reingeschrieben und Zurücklesen ging nicht. Ich vermute mal, daß man
> die IRQ-Benutzung irgendwie aktivieren muß, die werden die ja wohl
> optional gemacht haben wegen der Rückwärtskompatibilität.

So ist es. Den IRQ 5 habe ich selbst per Jumper eingestellt, ganz blöd bin
ich auch nicht. Der Interrupt wird aktiviert, indem man ein bestimmtes Bit
im Controlregister setzt, was ich auch getan habe. Meine Controllerkarte
scheint Probleme damit zu haben, am Port des Motherboards funktionierte es
plötzlich...


0 new messages