Interruption sur linux

Fermé
elqomri - 26 avril 2007 à 16:48
 Etienne - 11 juil. 2007 à 13:55
bonjour,
j'ai un projet ou je dois utiliser des interruption sous linux,
je sais qu'il y a une fanction request_irq qui existe, mais le problem c'est quand je met l'include interrupt.h j'ai plein d'erreur, comme softirq.h n'existe pas ...
est ce que quelqu'un a déja travailler sur des interruption sur linux
merci
A voir également:

15 réponses

mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 7 783
27 avril 2007 à 09:36
Compile avec l'option : -isystem /usr/include
Pour plus de détail sur le rôle de l'option -isystem (c'est presque pareil que -I)
man gcc

Bonne chance
0
merci , pour ta réponse , mais sa ne change rien ,
j'ai toujour autant d'erreur
0
mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 7 783
27 avril 2007 à 19:50
Si tu ne donnes pas les messages d'erreur (au moins le début) on ne va pas avancer beaucoup. Que donne
updatedb && locate softirq.h
0
elle donne cela:
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-alpha/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-arm/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-cris/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-i386/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-ia64/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-m68k/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-mips/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-mips64/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-parisc/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-ppc/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-ppc64/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-s390/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-s390x/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-sh/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-sh64/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-sparc/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-sparc64/softirq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-x86_64/softirq.h
0
quand je combile avec:
gcc -O2 -isystem usr/include w.c -o w
j'ai:
In file included from /usr/include/linux/sched.h:13,
from w.c:6:
/usr/include/linux/times.h:6: erreur: expected specifier-qualifier-list before ‘clock_t’
In file included from /usr/include/linux/sched.h:14,
from w.c:6:
/usr/include/linux/timex.h:148: erreur: field ‘time’ has incomplete type
In file included from /usr/include/linux/signal.h:4,
from /usr/include/linux/sched.h:25,
from w.c:6:
/usr/include/asm/signal.h:107: erreur: expected specifier-qualifier-list before ‘sigset_t’
In file included from /usr/include/linux/sched.h:69,
from w.c:6:
/usr/include/asm/processor.h:73: erreur: les éléments du tableau sont de type incomplet
Dans le fichier inclus à partir de /usr/include/linux/interrupt.h:9,
à partir de w.c:7:
/usr/include/asm/bitops.h:327:2: attention : #warning This includefile is not available on all architectures.
/usr/include/asm/bitops.h:328:2: attention : #warning Using kernel headers in userspace: atomicity not guaranteed
Dans le fichier inclus à partir de /usr/include/asm/hw_irq.h:16,
à partir de /usr/include/linux/irq.h:34,
à partir de /usr/include/asm/hardirq.h:6,
à partir de /usr/include/linux/interrupt.h:12,
à partir de w.c:7:
/usr/include/asm/atomic.h:40:2: attention : #warning Using kernel header in userland program. BAD!
In file included from /usr/include/linux/irq.h:34,
from /usr/include/asm/hardirq.h:6,
from /usr/include/linux/interrupt.h:12,
from w.c:7:
/usr/include/asm/hw_irq.h:78: erreur: expected ‘)’ before ‘(’ token
/usr/include/asm/hw_irq.h: In function ‘x86_do_profile’:
/usr/include/asm/hw_irq.h:212: erreur: ‘prof_pid’ undeclared (first use in this function)
/usr/include/asm/hw_irq.h:212: erreur: (Each undeclared identifier is reported only once
/usr/include/asm/hw_irq.h:212: erreur: for each function it appears in.)
/usr/include/asm/hw_irq.h:212: erreur: ‘current’ undeclared (first use in this function)
Dans le fichier inclus à partir de /usr/include/linux/irq.h:34,
à partir de /usr/include/asm/hardirq.h:6,
à partir de /usr/include/linux/interrupt.h:12,
à partir de w.c:7:
/usr/include/asm/hw_irq.h:236:2: attention : #warning Including kernel header in userspace!
In file included from /usr/include/linux/interrupt.h:12,
from w.c:7:
/usr/include/asm/hardirq.h: Hors de toute fonction :
/usr/include/asm/hardirq.h:13: erreur: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘irq_cpustat_t’
/usr/include/asm/hardirq.h:16: erreur: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘irq_stat’
In file included from /usr/include/asm/hardirq.h:22,
from /usr/include/linux/interrupt.h:12,
from w.c:7:
/usr/include/linux/irq_cpustat.h:20: erreur: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘irq_stat’
w.c: In function ‘main’:
w.c:12: attention : return type of ‘main’ is not ‘in
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
30 avril 2007 à 12:28
Salut,

Ou alors tu utilises les interruptions directement en assembleur dans ton code C.
Mais je pense que ce sera moins portable que d'utiliser les bibliothèques pour les interruptions.

Sous x86 (processeurs pc), voici comment ça se passe.
Le numéro de l'interruption c'est 80 en hexa. Le numéro de fonction se met dans eax puis les arguments se mettent dans ebx, ecx et edx par odre d'apparition.

Exemple: voici l'appel système numéro 5 sous Linux:
int sys_open(const char * filename, int flags, int mode)


Comment faire cet appel système?
Il faut lever l'interruption 0x80, mettre 5 dans eax, filename dans ebx, flags dans ecx et mode dans edx.

Et là tu peux te faire une fonction toute prête:
int sys_open(const char * filename, int flags, int mode)
{
    __asm__ __volatile__("movl 5, %eax\n"
                         "movl 8(%ebp), %ebx\n"
                         "movl 0xc(%ebp), %ecx\n"
                         "movl 0x10(%ebp), %edx\n"
                         "int $0x80");
}

Je l'ai pas testé, ya peut être une erreur dedans mais l'idée y est :D
Mais attention cette solution ne fonctionnera que sous x86.
Pour la liste des interruptions, voir ici:
http://asm.sourceforge.net/syscall.html



0
merci,
je suis entrain de tester votre solution,
en fait je dois faire une application qui utilise les interruptions causer par la réception de donnés sur le port com.
j'ai trouvé la fonction (request-irq) mais je n'arrive pas a l'utiliser
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
1 mai 2007 à 03:20
Le port com, donc le port série?
J'avoue que je ne sais pas trop comment ça se passe pour ça....
Je pense qu'il ya des fichiers spéciaux pour y accéder dans le repertoire /dev.
Sinon, pour y accéder sans passer par cette voie, il faut faire un programme qui tourne du côté du noyau...

Bref je dis tout ça, mais je ne suis sûr de rien à vrai dire :-/

Si tu dois faire ça en cours, renseigne toi un minimum sur ce que veux ton prof....
0
mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 7 783
2 mai 2007 à 02:30
As-tu créer un lien symbolique /usr/src/linux vers /usr/src/linux-2.4.34 : en root :
ln - s /usr/src/linux-2.4.34 /usr/src/linux

Ensuite l'option c'est bien -isystem /usr/include et non -isystem usr/include.

Car en fait le types clock_t est défini dans /usr/include/linux/types.h (vérifie notamment que ce fichier existe), ce qui est traité dans /usr/include/linux/times.h par le #include <linux/types.h>. Sauf que pour que ce header soit trouvé, il faut lui dire (via le -isystem) de taper dans le répertoire /usr/include/...
0
pour le lien:
sur /usr/src/ j'ai pas ces dossiers la , j'ai que Redhat comme répertoire,
j'ai retapé :
gcc -O2 -isystem /usr/include w.c -o w
j'ai toujours les meme erreur,
le fichier linux/types existe mais je ne sais pas pourquoi il arrive pas a utiliser les déclaration faite dedant
merci
0
désolé;
j'ai dis meme erreur le "/" avant usr/include ma enlever quelque erreur
0
mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 7 783
2 mai 2007 à 11:46
Ok quelles sont ces erreurs.
Peux-tu nous donner le code de w.c (au moins la partie avec les headers) ?
0
le w.c:
#include<stdio.h>
#include<asm/irq.h>
#include<asm/types.h>
#include<linux/types.h>
#include<linux/sched.h>
#include<linux/interrupt.h>
#include<linux/signal.h>
void main(void)
{
printf("ok");
}
aprés je compile:
gcc -O2 -isystem /usr/include w.c -o w
les erreurs que j'ai;
In file included from /usr/include/linux/sched.h:13,
from w.c:6:
/usr/include/linux/times.h:6: erreur: expected specifier-qualifier-list before ‘clock_t’
In file included from /usr/include/linux/sched.h:14,
from w.c:6:
/usr/include/linux/timex.h:148: erreur: field ‘time’ has incomplete type
In file included from /usr/include/linux/signal.h:4,
from /usr/include/linux/sched.h:25,
from w.c:6:
/usr/include/asm/signal.h:107: erreur: expected specifier-qualifier-list before ‘sigset_t’
In file included from /usr/include/linux/sched.h:69,
from w.c:6:
/usr/include/asm/processor.h:73: erreur: les éléments du tableau sont de type incomplet
Dans le fichier inclus à partir de /usr/include/linux/interrupt.h:9,
à partir de w.c:7:
/usr/include/asm/bitops.h:327:2: attention : #warning This includefile is not available on all architectures.
/usr/include/asm/bitops.h:328:2: attention : #warning Using kernel headers in userspace: atomicity not guaranteed
Dans le fichier inclus à partir de /usr/include/asm/hw_irq.h:16,
à partir de /usr/include/linux/irq.h:34,
à partir de /usr/include/asm/hardirq.h:6,
à partir de /usr/include/linux/interrupt.h:12,
à partir de w.c:7:
/usr/include/asm/atomic.h:40:2: attention : #warning Using kernel header in userland program. BAD!
In file included from /usr/include/linux/irq.h:34,
from /usr/include/asm/hardirq.h:6,
from /usr/include/linux/interrupt.h:12,
from w.c:7:
/usr/include/asm/hw_irq.h:78: erreur: expected ‘)’ before ‘(’ token
/usr/include/asm/hw_irq.h: In function ‘x86_do_profile’:
/usr/include/asm/hw_irq.h:212: erreur: ‘prof_pid’ undeclared (first use in this function)
/usr/include/asm/hw_irq.h:212: erreur: (Each undeclared identifier is reported only once
/usr/include/asm/hw_irq.h:212: erreur: for each function it appears in.)
/usr/include/asm/hw_irq.h:212: erreur: ‘current’ undeclared (first use in this function)
Dans le fichier inclus à partir de /usr/include/linux/irq.h:34,
à partir de /usr/include/asm/hardirq.h:6,
à partir de /usr/include/linux/interrupt.h:12,
à partir de w.c:7:
/usr/include/asm/hw_irq.h:236:2: attention : #warning Including kernel header in userspace!
In file included from /usr/include/linux/interrupt.h:12,
from w.c:7:
/usr/include/asm/hardirq.h: Hors de toute fonction :
/usr/include/asm/hardirq.h:13: erreur: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘irq_cpustat_t’
/usr/include/asm/hardirq.h:16: erreur: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘irq_stat’
In file included from /usr/include/asm/hardirq.h:22,
from /usr/include/linux/interrupt.h:12,
from w.c:7:
/usr/include/linux/irq_cpustat.h:20: erreur: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘irq_stat’
w.c: In function ‘main’:
w.c:12: attention : return type of ‘main’ is not ‘int’
0
mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 7 783
3 mai 2007 à 01:46
Bon alors je t'explique le cheminement et toi tu réadaptes au besoin.
gcc -W -Wall plop.c | more

On s'aperçoit que les premiers headers qui te manquent sont en fait des .h contenus dans /usr/include => je rajoute ce repertoire avec l'option -isystem ou -I :
gcc -isystem /usr/include -W -Wall plop.c | more

La j'ai une nouvelle erreur
(mando@aldur) (~) $ gcc -isystem /usr/include -W -Wall plop.c | more
In file included from /usr/include/asm/irq.h:8,
                 from plop.c:3:
/usr/include/asm-i486/irq.h:15:25: error: irq_vectors.h: Aucun fichier ou répertoire de ce type
...

Ok maintenant je cherche ou est planqué ce header (au besoin fais un updatedb si la commande suivante ne donne rien, sinon c'est qu'il te manque des headers) :
(mando@aldur) (~) $ locate irq_vectors.h
/usr/include/asm-i486/mach-default/irq_vectors.h
/usr/include/asm-i486/mach-visws/irq_vectors.h
/usr/include/asm-i486/mach-voyager/irq_vectors.h
/usr/include/asm/mach-default/irq_vectors.h
/usr/include/asm/mach-visws/irq_vectors.h
/usr/include/asm/mach-voyager/irq_vectors.h

Le premier a une bonne tête donc je le rajoute dans les includes. Nouvelle erreur :
(mando@aldur) (~) $ gcc -isystem /usr/include -isystem /usr/include/asm-i486/mach-default/ -W -Wall plop.c | more
In file included from /usr/include/asm/bitops.h:8,
                 from /usr/include/linux/bitops.h:9,
                 from /usr/include/linux/interrupt.h:7,
                 from plop.c:7:
/usr/include/asm-i486/bitops.h:244: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’

Ce qui correspond à la ligne :
static __always_inline int constant_test_bit(int nr, const volatile unsigned long *addr)
{
    return ((1UL << (nr & 31)) & (addr[nr >> 5])) != 0;
}

On cherche à coup de grep ou est defini le __always_inline qui provoque l'erreur :
(mando@aldur) (/usr/include/linux) $ grep -nr always_inline *
compiler-gcc3.h:16:#define __always_inline              inline __attribute__((always_inline))
compiler-gcc4.h:10:# define inline                      inline          __attribute__((always_inline))
compiler-gcc4.h:11:# define __inline__          __inline__      __attribute__((always_inline))
compiler-gcc4.h:12:# define __inline            __inline        __attribute__((always_inline))
compiler-gcc4.h:18:#define __always_inline              inline __attribute__((always_inline))
compiler-gcc.h:26:#define inline                inline          __attribute__((always_inline))
compiler-gcc.h:27:#define __inline__    __inline__      __attribute__((always_inline))
compiler-gcc.h:28:#define __inline      __inline        __attribute__((always_inline))
compiler.h:146:#ifndef __always_inline
compiler.h:147:#define __always_inline inline
mm.h:529:static __always_inline void *lowmem_page_address(struct page *page)
seqlock.h:83:static __always_inline unsigned read_seqbegin(const seqlock_t *sl)
seqlock.h:98:static __always_inline int read_seqretry(const seqlock_t *sl, unsigned iv)

Donc le problème vient de l'inclusion de ce header etc...

Je te laisse faire tes petites recherches, mais par tatonnement tu trouveras les includes et les options à passer à la compilation.

Bonne chance
0
vincenzo22 Messages postés 10 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 22 juin 2007
3 mai 2007 à 16:40
Bonjour,
J'ai quasiment le meme probleme...
A avoir que je veut utiliser la fonction POSIX 'request_irq' pour executer du code quand je recois une interruption.
Le probleme etant que je ne peut pas inclure les .h qui sont neccessaire au fonctionnement de 'request_irq'.

Le code source de ma fonction est le suivant :


#include <asm/irq.h>
#include <linux/signal.h>
#include <linux/sched.h>
#include <linux/interrupt.h>

void interrupt_1()
{
        printf("Hello World !!!\n");

}

int main()
{
	int a=0;
	void (*p_fonction)();		
	p_fonction=&interrupt_1;	
	int n_irq=14;
	const char *devname;
	void *dev_id;

	printf("request_irq !!!\n");
	a=request_irq(n_irq, p_fonction, SA_INTERRUPT, "ide1", 0);
	return 0;
}


Et voila ce qui me retourne dans le shell à la compilation:

gcc -isystem /usr/include capt_irq.c -o capt_irq                                          
In file included from /usr/include/linux/signal.h:4,
                 from capt_irq.c:15:
/usr/include/asm/signal.h:107: error: syntax error before "sigset_t"
/usr/include/asm/signal.h:110: error: syntax error before '}' token
In file included from /usr/include/linux/sched.h:14,
                 from capt_irq.c:23:
/usr/include/linux/timex.h:148: error: field `time' has incomplete type
In file included from /usr/include/linux/interrupt.h:9,
                 from capt_irq.c:27:
/usr/include/asm/bitops.h:327:2: warning: #warning This includefile is not available on all architectures.
/usr/include/asm/bitops.h:328:2: warning: #warning Using kernel headers in userspace: atomicity not guaranteed
In file included from capt_irq.c:27:
/usr/include/linux/interrupt.h:12:25: asm/hardirq.h: No such file or directory
/usr/include/linux/interrupt.h:13:25: asm/softirq.h: No such file or directory


J'ai remarqué sur internet que les personnes ayant un proleme similaire etait sous Fedora Core 3, ca ne serait pas cette distribution qui pose probleme?
Sinon, comme vous pouvez le voir j'ai rajouté le '-isystem /usr/include' et c'est deja mieux mais ... encore un petit probleme.
1/Je n'est pas le fichier 'softirq.h' sur mon systeme.
2/De plus, je ne comprends pas pourquoi j'ai une erreur de syntaxe sur le 'sigset_t'
3/Peut etre un probleme car nous sommes dans l'espace utilisateur et nous utilisons des librairies du noyau...

Je suis un peu perdu.
Merci de votre aide...
0
mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 7 783
4 mai 2007 à 01:34
Ben déjà tu as un problème d'include, il faut rajouter le répertoire qui contient asm/hardirq.h avec l'option -I ou -isystem. Ensuite il faut t'inspirer de ce que j'ai déjà dit plus haut c'est toujours le même principe, il suffit de dérouler le fil...
0
vincenzo22 Messages postés 10 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 22 juin 2007
7 mai 2007 à 10:18
Merci de ton aide, j'ai rajouter les includes mais j'ai toujours les erreurs de syntaxe sans qu'il me dise qu'il me manque des fichiers


Voila ce que j'ai a la compliation :
# gcc -O2 -I/usr/include/ capt_irq.c -o capt_irq
In file included from /usr/include/linux/interrupt.h:9,
                 from capt_irq.c:32:
/usr/include/asm/bitops.h:327:2: warning: #warning This includefile is not available on all architectures.
/usr/include/asm/bitops.h:328:2: warning: #warning Using kernel headers in userspace: atomicity not guaranteed
In file included from /usr/include/asm/hw_irq.h:16,
                 from /usr/include/linux/irq.h:34,
                 from /usr/include/asm/hardirq.h:6,
                 from /usr/include/linux/interrupt.h:12,
                 from capt_irq.c:32:
/usr/include/asm/atomic.h:40:2: warning: #warning Using kernel header in userland program. BAD!
In file included from /usr/include/linux/irq.h:34,
                 from /usr/include/asm/hardirq.h:6,
                 from /usr/include/linux/interrupt.h:12,
                 from capt_irq.c:32:
/usr/include/asm/hw_irq.h:78: error: syntax error before '(' token
/usr/include/asm/hw_irq.h: In function `x86_do_profile':
/usr/include/asm/hw_irq.h:212: error: `prof_pid' undeclared (first use in this function)
/usr/include/asm/hw_irq.h:212: error: (Each undeclared identifier is reported only once
/usr/include/asm/hw_irq.h:212: error: for each function it appears in.)
/usr/include/asm/hw_irq.h:212: error: `current' undeclared (first use in this function)
In file included from /usr/include/linux/irq.h:34,
                 from /usr/include/asm/hardirq.h:6,
                 from /usr/include/linux/interrupt.h:12,
                 from capt_irq.c:32:
/usr/include/asm/hw_irq.h:236:2: warning: #warning Including kernel header in userspace!
In file included from /usr/include/linux/interrupt.h:12,
                 from capt_irq.c:32:
/usr/include/asm/hardirq.h: At top level:
/usr/include/asm/hardirq.h:13: error: syntax error before "irq_cpustat_t"
In file included from /usr/include/asm/hardirq.h:15,
                 from /usr/include/linux/interrupt.h:12,
                 from capt_irq.c:32:
/usr/include/linux/irq_cpustat.h:20: error: syntax error before "irq_stat"
/usr/include/linux/irq_cpustat.h:20: warning: array 'irq_stat' assumed to have one element


Je me demande si le 'Using kernel headers in userspace: automicity not guaranteed' n'est pas bloquant pour la comilation...
0
mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 7 783
7 mai 2007 à 14:45
En fait c'est des histoires de compilation dans l'espace utilisateur et dans l'espace kernel. Malheureusement je ne me souviens plus comment ça marche je sais juste que ça ne se compile pas pareil. Par ailleurs tu ne derais pas inclure bitops.h

Essaye de voir si tu ne trouve pas ton bonheur ici
http://kadionik.vvv.enseirb-matmeca.fr/
0
vincenzo22 Messages postés 10 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 22 juin 2007
9 mai 2007 à 16:43
Merci, je vais regarder de ce coté la...
0
vincenzo22 Messages postés 10 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 22 juin 2007
15 mai 2007 à 14:37
J'ai reussi a capturer mon interruption, ca marche vraiment bien...
En fait, il faut etre dans l'espace noyau pour toucher au interruption..
Il faut donc creer un module chargeable qui utilisera la fonction 'request_irq'.
Puis on lance le module avec 'modprobe' ou 'insmod'...
Par contre, il faut faire attention car les fonctions noyau ne sont pas presnetes dans la libc utilisé dans l'espace user...
Voila, pour moi, nous pouvons cloturé ce post si vous n'avez pas d'autres questions...
Tchuss
PS : merci à mamiemando d'avoir pris le temps de ma repondre
0
salut,
félicitation,
est ce que tu peux m'envoyer l'exemple que t'a utilisé pour générer ton interruption ?
merci
0
j'ai essayé de passer par un module, sa marche bien
je remercie tous ceux qu'ils ont pris le temps de m'aider
0
mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 7 783
28 mai 2007 à 00:39
Ce serait sympa de mettre les grandes lignes pour la solution histoire qu'on puisse clore le sujet.

@+
0
Bonjour,

Je suis également preneur de ce code car j'essaie de créer un handler d'interruption qui réveille une tâche. Mon objectif étant de me faire la main sur l'utilisation des interruptions, mon exemple est très simple : Il sagit d'un main qui crée un trhead. Ce thread affiche un message au lancement, puis attend (pthread_con_wait). Après création du thread, le main active le handler d'interruption (request_irq(irq, it_handler, SA_INTERRUPT, "device",NULL). Sur réception de l'IT , je souhaite envoyer un signal à ce thread pour le réveiller (dans le handler d'interruption, pointeur de fonction dont voici la signature : void* it_handler(int irq, void*dev_id, struct pt_regs *regs)). J'essaie d'utiliser les mêmes headers et fonctions que ceux mentionnés dans le posts précédent, sans succès. Les messages d'erreur sont les mêmes que ceux identifiés dans ces posts... L'interruption que je veux utiliser est une bête frappe clavier (irq=1).

Merci d'avance pour vos réponses,
Etienne
0