LinuxSir.cn,穿越时空的Linuxsir!

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

系统调用返回-1,我已经看了很多帖子了,但是还是解决不了。大家帮忙看看吧。^_^。。谢

[复制链接]
发表于 2005-5-14 19:17:47 | 显示全部楼层 |阅读模式
在/usr/src/linux-2.4.26/arch/i386/kernel/entry.S

.long SYMBOL_NAME (sys_ni_syscall) 后添加:


ifdef CONFIG_SHM
.long SYMBOL_NAME(sys_printlogs)
.long SYMBOL_NAME(sys_flush)
#endif /*CONFIG_SHM*/

在/usr/src/linux-2.4.26/include/asm/unistd.h

#define __NR_exit_group 252 后添加:

#ifdef CONFIG_SHM
#define __NR_printlogs 253
#define __NR_flush 254
#endif /*CONFIG_SHM*/


系统调用函数分别在文件
sys_flush(): /usr/src/linux-2.4.26/mig_shm/sync.c
sys_printlogs(): /usr/src/linux-2.4.26/mig_shm/log_info.c

另外头文件有:/usr/src/linux-2.4.26/include/linux/printlogs.h
#ifndef __LINUX_PRINTLOGS_H
#def __LINUX_PRINTLOGS_H
#include <linux/linkage.h>
#include <linux/unistd.h>
__syscall0(long,printlogs)
#endif

头文件/usr/src/linux-2.4.26/mig_shm/flush.h
#ifndef __LINUX_FLUSH_H
#ifdef __LINUX_FLUSH_H
#include <linux/linkage.h>
#include <liunx/unistd.h>
_syscall0(long,flush)
#endif

这是自由社区的一个项目,我自己也证明了系统调用在系统内部是可用,但我始终不能手动调用这两个系统调用。

我的方法是:/*print.c*/
#include<linux/printlogs.h>
int main()
{
printlogs();
return 0;
}


gcc -I /usr/src/linux-2.4.26/include print.c

出现错误:
In function ‘printlogs’:
:undefined reference to "error"
collect 2:Id return 1 exit status

在printlogs.h中添加#include<errno.h>可以通过编译,但返回-1。

各位大牛,帮忙看看吧,谢谢。。。。
发表于 2005-5-14 19:30:40 | 显示全部楼层
这是什么?你是在写内核模块吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-14 19:44:56 | 显示全部楼层
是别人写好的内核模块,我想使用它提供的系统调用,但总调用不了。。
回复 支持 反对

使用道具 举报

发表于 2005-5-14 20:43:05 | 显示全部楼层
去内核版看看,已经回复
回复 支持 反对

使用道具 举报

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

本版积分规则

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