1

システムコールを書こうとしています。私はこれらの手順に従いました:

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

linux/Makefileをcore-y+= kernel / mm / fs / ipc / security / crypto / block /mycall/に変更しました

mycallというディレクトリを作成しました。----> linux / mycall

そのファイルの中に、mycall.cを配置しました:

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

6)Makefileを作成します。---> linux / mycall/Makefile。

obj−y := mycall.o

次に、このシステムコールを試すと、常に-1が返されます。これらの行は、デスクトップでの私のテストコードです。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 ;
}

次に、カーネルを再コンパイルします。コードをコンパイルしても問題はありません。このプログラムを実行すると、2つの値が合計されません。常に-1を返します。システムコールの何が問題になっていますか?(カーネルを再コンパイルしたとき、システムは3秒以上時間を無駄にしませんでした。ここでは、問題がある可能性があると思います)

4

1 に答える 1

2

カーネルを再コンパイルして再起動します。それともカーネルモジュールですか?

于 2009-11-11T16:09:46.953 に答える