LinuxSir.cn,穿越时空的Linuxsir!

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

求助: "Linux 内核解读入门 " 遇到实践问题

[复制链接]
发表于 2004-3-5 21:08:43 | 显示全部楼层 |阅读模式
我在/usr/src/linux/kernel/sys.c中写了一个sys_getuid1()函数
asmlinkage int sys_getuid1(int id)
{       
   id = current->uid'       
   return id;
}
并且在/usr/src/linux/arch/i386/kernel/entry.S中添加了
.long SYMBOL_NAME(sys_getuid1)        /*259号*/
在/usr/src/linux/include/asm/unistd.h中添加了
#define __NR_getuid1        259

然后进行测试:  #vi hu.c
#include <linux/unistd.h>
_syscall1(int,getuid1,int,id);
main()
{
        int id;
        printf("uid is %d \n",id);
}


输出为:uid is 1108517584
uid明显太大了

我又按照上面的步骤添加了第260号系统调用(输入2个数,返回其相加的结果)

测试运行,结果依然是1108517584(郁闷)

我是依照论坛里<<Linux 内核解读入门>>这片文章做的,我还差点什么工作吗??

还有一个问题:_syscall2(type,name,type1,arg1,type2,arg2);这个格式怎么用啊.要是我的系统调用没有参数,或者只有一个参数,我该怎么写呢?
发表于 2004-3-5 22:36:10 | 显示全部楼层
%d
 楼主| 发表于 2004-3-5 23:22:55 | 显示全部楼层
什么意思啊????
 楼主| 发表于 2004-3-6 09:31:54 | 显示全部楼层
那个id是问题,,没有赋值,我加一句id=getuid1(id)后,返回值是-1,不对
其实那个函数只用写成
asmlinkage int sys_getuid1(void)
{return current->uid;}就可以了,但是由于
"问题:_syscall2(type,name,type1,arg1,type2,arg2);这个格式怎么用啊.要是我的系统调用没有参数,或者只有一个参数,我该怎么写呢?"这个问题没有解决,所以我才写成先前的那样.



我的第260号调用是
asmlinkage int sys_add1(int,a,int,b)
{int num;
num=a+b;
return num;
}
测试#vi add.c
#include <linux/unistd.h>
_syscall2(int,add1,int,a,int,b);
main()
{ int s,a,b;
printf("Input 2 number :\n");
scanf("%d%d",&a,&b);
s = add1(a,b);
printf("result is %d \n",s);
}
结果还是 -1

我是个新手,所以请各位赐教,我自己也在不断的查找资料,边问边看效果很好的,谢谢各位了!
1. _syscall2(type,name,type1,arg1,type2,arg2);这个格式当系统调用没有参数时怎么写?
2. asmlinkage是什么意思?
3. 我的系统调用为什么结果总是 -1
 楼主| 发表于 2004-3-7 21:42:34 | 显示全部楼层
asmlinkage int sys_add1(int,a,int,b)

asmlinkage int sys_add1(int a,int b)
我发贴的时候多写了逗号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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