//------------------------------------------------------------------- // mytimer.c // // This module demonstrates the use of a dynamic kernel timer. // // programmer: ALLAN CRUSE // written on: 01 APR 2003 //------------------------------------------------------------------- #define __KERNEL__ #define MODULE #include // for init_module() #include // for HZ, struct timer_list #define SUCCESS 0 #define SECONDS_COUNT 10 static char modname[] = "mytimer"; // module's name static struct timer_list timer; // kernel object static unsigned up_seconds; // my timer data static void my_timer_function( unsigned long data ) { unsigned *mydata_ptr = (unsigned *)data; *mydata_ptr += SECONDS_COUNT; printk( "<1> my_timer_function: " ); printk( "uptime = %d seconds \n", up_seconds ); mod_timer( &timer, jiffies + HZ * SECONDS_COUNT ); } void cleanup_module( void ) { int status = del_timer_sync( &timer ); printk( "<1>Removing \'%s\' module\n", modname ); printk( "<1> status=%08X \n", status ); } int init_module( void ) { printk( "<1>\nInstalling \'%s\' module\n", modname ); // initialize our timer init_timer( &timer ); // setup our timer's structure fields timer.expires = jiffies + HZ * SECONDS_COUNT; timer.data = (unsigned)&up_seconds; timer.function = my_timer_function; // add our timer to the kernel timer queue add_timer( &timer ); return SUCCESS; } MODULE_LICENSE("GPL");