QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1625|回复: 3

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

[复制链接]
发表于 2005-2-3 22:00:36 | 显示全部楼层 |阅读模式
我用的发行版是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 ;
}

但是始终不能通过编译。。。编译时错误提示如下:
[root@Daemon ~]# 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
[root@Daemon ~]#

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

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

使用道具 举报

发表于 2005-2-16 17:59:45 | 显示全部楼层
#include<linux/unistd.h>
不是unistd.h
回复

使用道具 举报

发表于 2005-2-17 14:16:15 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 08:20 , Processed in 0.058493 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表