添加系统调用后,调用时总是返回-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     
 以上是参考,具体版本使用的数据结构名字,在代码里面找找