2010-10-24 22 views
0

encore en train de travailler sur cet appel système !!!pourquoi suis-je obtenir ces erreurs de syntaxe en essayant d'implémenter l'appel système

J'ai ajouté un appel système à un noyau, compilé et le système d'exploitation l'exécute.

maintenant je reçois erreur de syntaxe sur la compilation de mon application de test.

testmycall.h

#include<linux/unistd.h> 

#define __NR_mycall 244 

_syscall1(long, mycall, int, i) 

testmycall.c

#include<stdio.h> 

#include "testmycall.h" 

int main(int argc, char *argv[]) 

{ 

    printf("%d\n", mycall(15)); 

} 

est ici l'erreur

[email protected]:~$ gcc -o testmycall testmycall.c 
In file included from testmycall.c:3: 
testmycall.h:7: error: expected ‘)’ before ‘mycall’ 
[email protected]:~$ gcc -o testmycall testmycall.c 
In file included from testmycall.c:3: 
testmycall.h:7: error: expected declaration specifiers or ‘...’ before ‘mycall’ 
testmycall.h:7: error: expected declaration specifiers or ‘...’ before ‘i’ 
testmycall.c: In function ‘_syscall1’: 
testmycall.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token 
testmycall.h:7: error: parameter name omitted 
testmycall.h:7: error: parameter name omitted 
testmycall.c:11: error: expected ‘{’ at end of input 
[email protected] 

i ont ajouté dans le syscall au lieu de _syscall1

maintenant i obtenir cette erreur

[email protected]:~$ gcc -o testmycall testmycall.c 
testmycall.c: In function ‘syscall’: 
testmycall.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token 
testmycall.c:11: error: expected ‘{’ 

c'est l'application, des idées pourquoi ???

+3

S'il vous plaît publier l'erreur exacte que vous obtenez. – DarkDust

+0

erreur ajouté à l'article – molleman

+0

Essayez de regarder le code prétraité - qui peut vous dire (et nous) plus sur le problème. Utilisez gcc -E pour la sortie et faites attention à la dernière partie où se trouve l'erreur de syntaxe. –

Répondre

1

Les macros _syscall sont obsolètes et ne doivent pas être utilisées, utilisez plutôt syscall, par ex.

#define _GNU_SOURCE 
#include <unistd.h> 
... 

printf("%d\n", syscall(__NR_mycall, 15)); 

Voici mon programme de test:

#define _GNU_SOURCE 
#include <stdio.h> 
#include <unistd.h> 

#define __NR_mycall 244 

int main(int argc, char **argv) 
{ 
    printf("%d\n", syscall(__NR_mycall,15)); 
    return 0; 
} 
+0

même erreur que ci-dessus pour ce – molleman

+0

@molleman: J'ai ajouté un programme de test qui compile pour moi – Hasturkun

+0

acclamations homme, cela compile pour moi, il doit avoir été à faire avec le fichier d'en-tête, ne comprends pas vraiment pourquoi – molleman

2

Je crois que les macros _syscallN() ont été retirées des en-têtes de noyau autour de 2.6.18 ou plus.

Les (pas particulièrement utile) des messages d'erreur de gcc sont dues à _syscall1 pas défini du tout - vous obtenez les mêmes erreurs si vous écrivez:

any_old_rubbish_here(long, mycall, int, i) 

La fonction syscall() devrait fonctionner. man syscall pour plus de détails.

+0

ajouté une nouvelle erreur, de la compilation pour syscall() – molleman