Rechercher : dans
Par :

Interruption sur linux

Dernière réponse le 11 jui 2007 à 13:55:04 elqomri, le 26 avr 2007 à 16:48:17 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « interruption sur linux » dans :
Choisir une distribution Linux VoirChoisir sa distribution GNU/Linux est loin d'être évident ! Surtout quand on débute sur la banquise ;-) Ceci n'a pas la prétention de promouvoir une distribution au détriment des autres. C'est plutôt une liste de solutions classées par...
Configurer le wifi sous Linux VoirWiFi sous Linux Première étape : diagnostic Deuxième étape : la carte n'est pas reconnue Troisième étape : configurer la carte En WEP En WPA Quatrième étape : se connecter au point d'accès Toujours en difficulté ? Ce tutoriel...
Télécharger Broadcom Ethernet NIC NetLink Driver pour Linux VoirLes drivers Broadcom NetLink BCM57xx/NetXtreme BCM57xx WHQL fonctionnent avec les chipsets suivants : BCM 5781, BCM 5786, BCM 5787, BCM 5788, BCM 5789 Ces pilotes fonctionnent sur le système Linux (tg3)
Linux - L'installation de logiciels VoirLes différents types d'archives Basiquement il existe plusieurs façons de récupérer une application fonctionnant sous Linux : Sous forme de paquetage RPM. Il s'agit d'un fichier portant l'extension .rpm permettant une installation automatique,...
Commandes Linux VoirTableau des principales commandes Linux Commande Description équivalent DOS ls liste le contenu d'un répertoire dir cd change de répertoire cd cd .. répertoire parent cd.. mkdir crée un nouveau...
Linux - L'éditeur Vi VoirIntroduction à Vi Vi est un des éditeurs de texte les plus populaires sous les systèmes de type Unix (avec Emacs et pico) malgré son ergonomie très limitée. Sous Linux il existe une version libre de Vi appelée Vim (Vi Improved). Vi (prononcez...

1

mamiemando, le 27 avr 2007 à 09:36:25

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

Répondre à mamiemando

2

elqomri, le 27 avr 2007 à 18:54:09

Merci , pour ta réponse , mais sa ne change rien ,
j'ai toujour autant d'erreur

Répondre à elqomri

3

mamiemando, le 27 avr 2007 à 19:50:42

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

Répondre à mamiemando

4

elqomri, le 30 avr 2007 à 10:32:17

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/softir­q.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-parisc/softir­q.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/softi­rq.h
/usr/src/linux-2.4.34/linux-2.4.34/include/asm-x86_64/softir­q.h

Répondre à elqomri

5

elqomri, le 30 avr 2007 à 11:02:55

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

Répondre à elqomri

6

kilian, le 30 avr 2007 à 12:28:55

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



..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

7

el qomri, le 30 avr 2007 à 14:02:01

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

Répondre à el qomri

8

kilian, le 1 mai 2007 à 03:20:14

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....

..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

9

mamiemando, le 2 mai 2007 à 02:30: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/...

Répondre à mamiemando

10

elqomri, le 2 mai 2007 à 10:25:38

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

Répondre à elqomri

11

elqomri, le 2 mai 2007 à 10:27:54

Désolé;
j'ai dis meme erreur le "/" avant usr/include ma enlever quelque erreur

Répondre à elqomri

12

mamiemando, le 2 mai 2007 à 11:46:29

Ok quelles sont ces erreurs.
Peux-tu nous donner le code de w.c (au moins la partie avec les headers) ?

Répondre à mamiemando

13

elqomri, le 2 mai 2007 à 11:55:44

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’

Répondre à elqomri

14

mamiemando, le 3 mai 2007 à 01:46:19

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

Répondre à mamiemando

15

vincenzo22, le 3 mai 2007 à 16:40:21

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...

Répondre à vincenzo22

16

mamiemando, le 4 mai 2007 à 01:34:17

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...

Répondre à mamiemando

17

vincenzo22, le 7 mai 2007 à 10:18:26

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...

Répondre à vincenzo22

18

mamiemando, le 7 mai 2007 à 14:45:30

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://www.enseirb.fr/~kadionik/linux/kernel_mods.pdf

Répondre à mamiemando

19

vincenzo22, le 9 mai 2007 à 16:43:52

Merci, je vais regarder de ce coté la...

Répondre à vincenzo22

20

vincenzo22, le 15 mai 2007 à 14:37:46
  • +1

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

Répondre à vincenzo22

21

elqomri, le 15 mai 2007 à 15:23:05

Salut,
félicitation,
est ce que tu peux m'envoyer l'exemple que t'a utilisé pour générer ton interruption ?
merci

Répondre à elqomri

22

elqomri, le 21 mai 2007 à 09:50:34

J'ai essayé de passer par un module, sa marche bien
je remercie tous ceux qu'ils ont pris le temps de m'aider

Répondre à elqomri

23

mamiemando, le 28 mai 2007 à 00:39:01

Ce serait sympa de mettre les grandes lignes pour la solution histoire qu'on puisse clore le sujet.

@+

Répondre à mamiemando

24

 Etienne, le 11 jui 2007 à 13:55:04

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

Répondre à Etienne