システムコールを書こうとしています。私はこれらの手順に従いました:
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秒以上時間を無駄にしませんでした。ここでは、問題がある可能性があると思います)