Interruption sur linux
Fermé
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
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:
- Interruption sur linux
- Diskinternals linux reader - Télécharger - Stockage
- Linux mint 32 bits - Télécharger - Systèmes d'exploitation
- Linux live usb creator - Télécharger - Outils Internet
- Backtrack linux - Télécharger - Sécurité
- R-linux - Télécharger - Sauvegarde
15 réponses
mamiemando
Messages postés
33642
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 avril 2025
7 844
27 avril 2007 à 09:36
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)
Bonne chance
Pour plus de détail sur le rôle de l'option -isystem (c'est presque pareil que -I)
man gcc
Bonne chance
mamiemando
Messages postés
33642
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 avril 2025
7 844
27 avril 2007 à 19:50
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
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
/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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
5 février 2025
1 526
30 avril 2007 à 12:28
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:
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:
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
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
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
5 février 2025
1 526
1 mai 2007 à 03:20
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....
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....
mamiemando
Messages postés
33642
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 avril 2025
7 844
2 mai 2007 à 02:30
2 mai 2007 à 02:30
As-tu créer un lien symbolique /usr/src/linux vers /usr/src/linux-2.4.34 : en root :
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/...
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/...
mamiemando
Messages postés
33642
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 avril 2025
7 844
2 mai 2007 à 11:46
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) ?
Peux-tu nous donner le code de w.c (au moins la partie avec les headers) ?
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’
#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’
mamiemando
Messages postés
33642
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 avril 2025
7 844
3 mai 2007 à 01:46
3 mai 2007 à 01:46
Bon alors je t'explique le cheminement et toi tu réadaptes au besoin.
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 :
La j'ai une nouvelle erreur
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) :
Le premier a une bonne tête donc je le rajoute dans les includes. Nouvelle erreur :
Ce qui correspond à la ligne :
On cherche à coup de grep ou est defini le __always_inline qui provoque l'erreur :
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
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
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
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 :
Et voila ce qui me retourne dans le shell à la compilation:
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...
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...
mamiemando
Messages postés
33642
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 avril 2025
7 844
4 mai 2007 à 01:34
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...
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
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 :
Je me demande si le 'Using kernel headers in userspace: automicity not guaranteed' n'est pas bloquant pour la comilation...
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...
mamiemando
Messages postés
33642
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 avril 2025
7 844
7 mai 2007 à 14:45
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/
Essaye de voir si tu ne trouve pas ton bonheur ici
http://kadionik.vvv.enseirb-matmeca.fr/
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
9 mai 2007 à 16:43
Merci, je vais regarder de ce coté la...
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
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
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
mamiemando
Messages postés
33642
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 avril 2025
7 844
28 mai 2007 à 00:39
28 mai 2007 à 00:39
Ce serait sympa de mettre les grandes lignes pour la solution histoire qu'on puisse clore le sujet.
@+
@+
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
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
27 avril 2007 à 18:54
j'ai toujour autant d'erreur