我尝试编写一个系统调用。我遵循以下步骤:编写一个系统调用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 /拱/ 86 /包含/ ASM/unistd_32.h ---->的#define NR的MyCall 333
我改变的linux/Makefile以芯-γ+ =内核/毫米/ FS/IPC/security/crypto/block/mycall/
我创建了一个名为mycall的目录。 ----> LINUX /的MyCall
在这个文件中,我放置mycall.c:
#include <linux/kernel.h>
asmlinkageintsysmcall(int i,int j)
{
return i + j ;
}
6)我创建生成文件。 ---> 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 ;
}
然后我重新编译内核。如果我编译代码,没有错。当我运行这个程序时,它不会总结两个值。它只是返回总是-1。我的系统调用出了什么问题? (当我重新编译内核时,系统没有浪费时间超过3秒,我想这里可能会出现问题)
IMO,内核模块不应该/真的/被用来添加系统调用功能;太多糟糕的巫术可能会发生。 (加上他们是一个错误调试,如果出现问题!) – 2009-11-11 16:44:19
我只是写一个系统调用。我是否需要重新编译内核? – Iguramu 2009-11-11 16:51:02
重新编译系统后,我必须安装吗? (sudo dpkg -i linux-image-2.6.28.10-custom .... deb) – Iguramu 2009-11-11 16:57:38