LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 872|回复: 4

请教一个系统调用的基本问题---------急

[复制链接]
发表于 2004-6-13 21:22:00 | 显示全部楼层 |阅读模式
请教一个系统调用的基本问题---------急
添加一个求累加值的系统调用
1:在/usr/src/linux/kernel/sys.c最后添加系统服务例程如下
asmlinkage int sys_addtotal(int numdata)
{
int i=0,enddata=0;
while(i<=numdata)
enddata+=i++;
return enddata;
}
2:在/usr/src/linux/arch/i386/kernel/entry.s中添加如下
.long sys_mq_timedsend
.long sys_mq_timedreceive /* 280 */
.long sys_mq_notify
.long sys_mq_getsetattr
.long sys_addtotal /我添加的/

syscall_table_size=(.-sys_call_table)
3:在/usr/src/linux/include/asm-i386/unistd.h中添加如下
#define __NR_mq_open 277
#define __NR_mq_unlink (__NR_mq_open+1)
#define __NR_mq_timedsend (__NR_mq_open+2)
#define __NR_mq_timedreceive (__NR_mq_open+3)
#define __NR_mq_notify (__NR_mq_open+4)
#define __NR_mq_getsetattr (__NR_mq_open+5)

#define NR_syscalls 283
#define __NR_addtotal /我添加的/
4:测试程序(test.c)用记事本写的另存为test.c文件程序如下
#include
#include
_syscall1(int,addtotal,int, num)
main()
{
int i,j;
  do
printf("lease input a number\n");
while(scanf("%d",&i)==EOF);
if((j=addtotal(i))==-1)
printf("Error occurred in syscall-addtotal();\n");
printf("Total from 0 to %d is %d \n",i,j);
}
然后重新编译内核用新的内核引导系统
在终端下输入
[root@localhost Desktop]# gcc -o test test.c
test.c: In function `addtotal':
test.c:5: error: parse error before ')' token
test.c:26:2: warning: no newline at end of file
这是现在的错误提示

那位帮个忙!解决下
发表于 2004-6-13 22:31:50 | 显示全部楼层
一个是do while之间不要用分号,一个是 函数最后加一个回车
 楼主| 发表于 2004-6-13 23:41:39 | 显示全部楼层
test.c: In function `addtotal':
test.c:5: error: parse error before ')' token
现在的错误,刚才最后一个错误多谢楼上的老兄解答

第一个应该是定义出现错误
第二个应该在第5排吧!但是就是找不出来
发表于 2004-6-14 17:04:59 | 显示全部楼层
搞错,是printf里面不是用分号吧,逗号
 楼主| 发表于 2004-6-14 18:47:13 | 显示全部楼层
_syscall1(int,addtotal,int, num)
这个里面有错误吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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