添加系统调用后,调用时总是返回-1,为什么?
用的suse10,版本2.6.13
我的步骤是
1、在/usr/src/linux/kernel-2.6.13/sys.c文件中添加源代码,如下所示:
asmlinkage int sys_mycall(int number)
{
return number;
}
2、在/usr/src/linux/include/asm-i386/unistd.h 中添加
#define __NR_mycall 295(我的内核中最后一个是294)
3、/usr/src/linux/arch/i386/kernel/sys_call_table.s中添加
.long sys_mycall
4、编译内核,这一步没有问题
5、调用新的系统调用
程序:
#include <linux/unistd.h>
#include <errno.h>
_syscall1(int,mycall,int,number)
int main()
{
int ret;
ret = mycall(100);
printf( "%d\n ",ret);
return 0;
}
6、编译后运行,本来结果应该是100,可是真正结果是-1……
为什么啊?哪位大虾遇到过这个问题或者知道怎么解决啊?帮帮忙!!
------解决方案--------------------1、在/usr/src/linux/kernel-2.6.13/sys.c文件中添加源代码,如下所示:
asmlinkage int sys_mycall(int number)
{
return number;
}
3、/usr/src/linux/arch/i386/kernel/sys_call_table.s中添加
.long sys_mycall
这两个函数怎么一样??sys_call_table.s中应该添加:
mycall:
mov eax, 295
call 80h
ret
然后再在系统调用函数列表sys_table中增加sys_mycall
以上是参考,具体版本使用的数据结构名字,在代码里面找找