¡¾ÇóÖú¡¿Ä£¿éÎÞ·¨¼ÓÔØ£¬¸ßÊÖ°ïæ£¡£¡£¡
¡¶±ßѧ±ß¸É-linuxÄÚºËÖ¸µ¼¡µ¡µÖеÚÎåÕÂϵͳµ÷ÓõÄ×îºóÒ»¸öÀý×Ó£¬/*
*pedagogictime.c
*/
//#define MODULE
#include<linux/kernel.h> /* printk() */
#include<linux/module.h>
#include<linux/init.h>
#include<linux/unistd.h>
#include<linux/time.h>
#include<asm/uaccess.h>
#include<linux/sched.h>
#define __NR_pedagogictime 259
MODULE_DESCRIPTION("My sys_pedagogictime()");
MODULE_LICENSE("GPL");
MODULE_AUTHOR ("Your Name:),(C)2006,GPLv2 or later");
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 "Pid %ld called sys_gettimeofday().\n",(long)current->pid);
MOD_DEC_USE_COUNT;
return 0;
}
int __init init_addsyscall(void)
{
extern unsigned long sys_call_table[];
// extern void *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 unsigned long sys_call_table[];
// extern void *sys_call_table;
sys_call_table[__NR_pedagogictime]=(unsigned long)anything_saved;
}
module_init( init_addsyscall);
module_exit( exit_addsyscall);
±àÒëÖ®ºóÄ£¿é¼ÓÔØÊ±×ܱ¨´í£º£º£ºunresolved symbol sys_call_table
²»ÖªµÀÈçºÎÐ޸IJÅÄܵ÷ÓüÓÔØ×ŸöÄ£¿é£¬Çë¸ßÊÖÖ¸µã£¬Ð»Ð»£¡
Ò³:
[1]