QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 897|回复: 1

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

[复制链接]
发表于 2004-6-13 14:16:49 | 显示全部楼层 |阅读模式
添加一个求累加值的系统调用
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("Please 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

请问这是什么原因,改如何解决!急
 楼主| 发表于 2004-6-13 14:28:29 | 显示全部楼层
mdk10.0     kernel2.6.3
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-16 09:01 , Processed in 0.037609 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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