[问题]内核版本2.6.17.13中添加系统调用不成功……

编译打包和其他
回复
magics6565
帖子: 1
注册时间: 2006-11-01 20:45

[问题]内核版本2.6.17.13中添加系统调用不成功……

#1

帖子 magics6565 » 2007-03-10 22:40

急切的希望有人能伸出援手,不管是解答还是帮我顶起来,谢谢! :cry:
我是这样添加的:
在/usr/src/linux/arch/i386/kernel/syscall_table.s最下面加一行.long youcall

/usr/scr/linux/include/asm-i386/unistd.h中间加上#define __NR_youcall 317,修改NR_syscalls,呈现为下:
……
#define __NR_vmsplice 316
#define __NR_youcall 317 //这行是我加上的
#ifdef __KERNEL__

#define NR_syscalls 318
……

在/usr/scr/linux/kernel/sys.c文件最下面添加:
asmlinkage long sys_youcall(long a){
return a;
}

然后重新编译内核如下:
root@localhost:/usr/src/linux# make mrproper
root@localhost:/usr/src/linux# make xconfig //直接关闭,使用默认设置
root@localhost:/usr/src/linux#make dep
root@localhost:/usr/src/linux#make clean
root@localhost:/usr/src/linux#make bzImage
root@localhost:/usr/src/linux# make install
root@localhost:/usr/src/linux# make modules
root@localhost:/usr/src/linux# make modules_install
root@localhost:/usr/src/linux# /usr/sbin/mkinitramfs -o /boot/initrd.img-2.6.17.6 /lib/modules/2.6.17.13-ubuntu1

最后打开 /boot/grub/menu.lst,写入新内核信息,并重启,从进入新建内核。

建立一个test.c文件,如下:
#include <stdio.h>
#include </usr/src/linux-source-2.6.17/include/asm/unistd.h>
#include <errno.h>
_syscall1(long,youcall,long,a)
int main(){
printf("%d\n",youcall(17));
return 0;
}

编译显示:
root@MagicWorld:~/Desktop# gcc -o test test.c
test.c:5: 错误: syntax error before ‘youcall’
test.c: 在函数 ‘_syscall1’ 中:
test.c:7: 错误: syntax error before ‘{’ token

新内核其他功能正常。
同学用几乎一样的方法却可以实现,但他内核是2.6.15的,是内核版本的原因吗?还是别的,我实在是弄不明白了,希望有前辈能指点一下,不胜感激!
Feb29
帖子: 8
注册时间: 2007-04-02 21:09

#2

帖子 Feb29 » 2007-04-02 21:51

编译器版本?
回复