编写系统调用linux

时间:2009-11-11 16:07:23

标签: linux kernel system-calls

我尝试编写系统调用。我按照以下步骤操作:

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。 ---&GT; LINUX /的MyCall /生成文件。

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 ;
}

然后我重新编译内核。如果我编译代码,没有错。当我运行这个程序时,它不会将两个值相加。它只返回-1。我的系统调用出了什么问题? (当我重新编译内核时,系统没有浪费时间超过3秒。我想在这里,可能会出现问题)

1 个答案:

答案 0 :(得分:2)

重新编译内核并重新启动。或者它是一个内核模块?