2009-11-11 10 views
1

J'essaye d'écrire un appel système. J'ai suivi ces étapes:Écrire un appel système pour Linux

linux/arch/x86/kernel/syscall_table_32.S ---->. long sys mycall

linux/include/linux/syscalls.h --------> asmlinkage int sys mycall (int i, int j);

linux/arch/x86/include/asm/unistd_32.h ----> #define NR mycall 333

I changé linux/Makefile à noyau-y + = noyau/mm/fs/ipc/security/crypto/block/mycall/

J'ai créé un répertoire, appelé mycall. ----> linux/mycall

A l'intérieur de ce fichier, j'ai placé mycall.c:

#include <linux/kernel.h> 
asmlinkageintsysmcall(int i,int j) 
{ 
return i + j ; 
} 

6) je crée Makefile. ---> linux/mycall/Makefile.

obj−y := mycall.o 

Puis, quand j'essaie cet appel système, il retourne toujours -1. Ces lignes sont mon code de test dans Desktop. testmycall.c

#include <stdio.h> 
#include <sys/syscall.h> 
#define __NR_mycall 333 

int main(void) 
{ 
int x1=10, x2=20, y ; 
y = syscall (__NR_mycall, x1, x2); 
printf (”%d\n”,y); 
return 0 ; 
} 

Alors je recompiler le noyau. Si je compile le code, il n'y a rien de mal. Quand je lance ce programme, il ne somme pas deux valeurs. Il revient juste toujours -1. Quel est le problème avec mon appel système? (quand je recompile le noyau, le système n'a pas perdu de temps plus de 3 secondes Je pense qu'il pourrait y avoir un problème)

Répondre

2

Recompilez le noyau et redémarrez. Ou est-ce un module noyau?

+0

IMO, un module noyau ne doit pas/vraiment/être utilisé pour ajouter une fonctionnalité d'appel système; trop de mauvais vaudou peut arriver. (De plus, ils sont un bugger pour déboguer si quelque chose ne va pas!) –

+0

Je viens d'écrire un appel système. Ai-je besoin de recompiler le noyau? – Iguramu

+0

Après avoir recompilé le système, dois-je installer? (sudo dpkg -i linux-image-2.6.28.10-custom .... deb) – Iguramu