wmzlq 发表于 2005-2-3 22:00:36

我为2.6内核增加系统调用怎么老是失败

我用的发行版是Fedora Core 3,内核是2.6.10
我增加系统调用的方法是:


1.修改arch/i386/kernel/entry.S ,sys_call_table(对应源文件倒数第2行)增加:
.long sys_wmzlq
其中, sys_wmzlq为新增加的系统调用

2.修改 include/asm-i386/unistd.h,增加宏定义:
#define __NR_wmzlq                289
然后把原来的#define NR_syscall 289 改为#define NR_syscall 290

3.编写系统调用将其插入kernel/sys.c
asmlinkage int sys_wmzlq()
{
      return 1112;
}

5.编译内核(内核源码放在/usr/src中,形式是/usr/src/linux-2.6.10 , 并应用新内核启动linux(编译内核这一步我已经做好了,保证没有问题)

6. 编写程序测试新加入的系统调用
/* test.c by wmzlq */
#include <unistd.h>
#include <stdio.h>
#include <errno.h>

_syscal0(int,wmzlq) ;

int main()
{
        int i ;
        i = wmzlq() ;
        printf("%d",i) ;
        return 0 ;
}

但是始终不能通过编译。。。编译时错误提示如下:
# gcc -o test test.c
test.c:5: error: syntax error before "wmzlq"
test.c:5: warning: data definition has no type or storage class
#

请问高手我的做法哪一步有错了呢?
我看到网上有一文章是针对2.2.5的(地址是:http://www.linuxsir.org/bbs/showthread.php?s=&threadid=24275),但在2.6的内核上有些地方不一样了,我就尝试着上述我自己琢磨出的方法,可惜没有成功。
对于2.6.10的内核(或者2.6.* 内核)该怎么添加新的系统调用呢?
有哪位高手曾经做过类似的尝试,能把经验分享一下么?
先谢了。。。

wayrain 发表于 2005-2-5 09:49:00

老哥,我是个路过的

你连
wmzlq() 都没有声明也,
_syscal0(int,wmzlq) ; <--- 这个封装怎么起作用呢,
而且后面还加了个';'<--语法错误

zhllg 发表于 2005-2-16 17:59:45

#include<linux/unistd.h>
不是unistd.h

xue_hu2001 发表于 2005-2-17 14:16:15

:lol:
页: [1]
查看完整版本: 我为2.6内核增加系统调用怎么老是失败