//------------------------------------------------------------------- // timerinfo.c // // This module creates a pseudo-file (named '/proc/timerinfo') // which shows some timer-related fields in the 'task_struct'. // // programmer: ALLAN CRUSE // written on: 18 SEP 2004 //------------------------------------------------------------------- #include // for init_module() #include // for create_proc_read_entry() static char modname[] = "timerinfo"; static int my_proc_read( char *buf, char **start, off_t off, int count, int *eof, void *data ) { struct task_struct *tsk = current; unsigned long *lp = (unsigned long*)&tsk->real_timer; int i, len; len = sprintf( buf, "\ntask_struct information (pid=%d)", tsk->pid ); len += sprintf( buf+len, " jiffies=%08X ", jiffies ); len += sprintf( buf+len, " start_time=%08X ", tsk->start_time ); len += sprintf( buf+len, "\nit_real_value=%08X ", tsk->it_real_value ); len += sprintf( buf+len, "it_real_incr=%08X ", tsk->it_real_incr ); len += sprintf( buf+len, "\nit_prof_value=%08X ", tsk->it_prof_value ); len += sprintf( buf+len, "it_prof_incr=%08X ", tsk->it_prof_incr ); len += sprintf( buf+len, "\nit_virt_value=%08X ", tsk->it_virt_value ); len += sprintf( buf+len, "it_virt_incr=%08X ", tsk->it_virt_incr ); len += sprintf( buf+len, "\nreal_timer: " ); for (i = 0; i < 5; i++) len += sprintf( buf+len, "%08X ", lp[i] ); len += sprintf( buf+len, "\n" ); return len; } void cleanup_module( void ) { remove_proc_entry( modname, NULL ); } int init_module( void ) { create_proc_read_entry( modname, 0, NULL, my_proc_read, NULL ); return 0; //SUCCESS; } MODULE_LICENSE("GPL");