|
#include <linux/init.h>
#include <linux/time.h>
#include <linux/sched.h>
#include <asm/uaccess.h>
#define __NR_pedagogictime 238
MODULE_DESCRIPTION("My sys_pedagogictime()");
MODULE_LICENSE("GPL");
static int (*anything_saved)(void);
static int sys_pedagogictime(struct timeval *tv)
{
struct timeval ktv;
MOD_INC_USE_COUNT;
do_gettimeofday(&ktv);
if (copy_to_user(tv, &ktv, sizeof(ktv))){
MOD_DEC_USE_COUNT;
return -EFAULT;
}
printk(KERN_ALERT " id %d called sys_gettimeofday().\n",current->pid);
MOD_DEC_USE_COUNT;
return 0;
}
int __init init_addsyscall(void)
{
extern long sys_call_table[];
anything_saved = (int(*)(void))(sys_call_table[__NR_pedagogictime]);
sys_call_table[__NR_pedagogictime] = (unsigned long)sys_pedagogictime;
return 0;
}
void __exit exit_addsyscall(void)
{
extern long sys_call_table[];
anything_saved = (int(*)(void))(sys_call_table[__NR_pedagogictime]);
sys_call_table[__NR_pedagogictime] = (unsigned long)sys_pedagogictime;
return 0;
}
void __exit exit_addsyscall(void)
{
extern long sys_call_table[];
sys_call_table[__NR_pedagogictime] = (unsigned long)anything_saved;
}
module_init(init_addsyscall);
module_exit(exit_addsyscall);
编译加载:
[root@dany samples]# gcc -c pedagogictime.c -D __KERNEL__ -D MODULE -I
/usr/src/linux/include/ -O2 -DLINUX -Wall
[root@dany samples]# insmod pedagogictime.o
pedagogictime.o: unresolved symbol sys_call_table
[root@dany samples]#
该如何解决才好啊?请高手指点一二!谢谢了!!! |
|