|
在/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。
各位大牛,帮忙看看吧,谢谢。。。。 |
|