我为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.* 内核)该怎么添加新的系统调用呢?
有哪位高手曾经做过类似的尝试,能把经验分享一下么?
先谢了。。。 老哥,我是个路过的
看
你连
wmzlq() 都没有声明也,
_syscal0(int,wmzlq) ; <--- 这个封装怎么起作用呢,
而且后面还加了个';'<--语法错误 #include<linux/unistd.h>
不是unistd.h :lol:
页:
[1]