linux内核中的定时器的例子
mytimer.c
#include <linux/module.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/mm.h>
#include <linux/ioport.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <asm/io.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("zl");
typedef struct mytimer_s {
struct timer_list timer;
long data;
} mytimer_t;
mytimer_t mytimer;
static void timer_handle(struct timer_list *timer)
{
mytimer_t *timerptr = container_of(timer, mytimer_t, timer);
timerptr->data += 1;
mod_timer(timer, (jiffies + timerptr->data * HZ));
printk("timer handle... data = %ld\n", timerptr->data);
}
static int test_init(void)
{
int ret = 0;
timer_setup(&(mytimer.timer), timer_handle, 123);
mytimer.timer.function = timer_handle;
mytimer.timer.expires = jiffies + 1 * HZ;
add_timer(&(mytimer.timer));
mytimer.data = 0;
printk("timer handle...\n");
return ret;
}
static void test_exit(void)
{
printk("test exit!\n");
}
module_init(test_init);
module_exit(test_exit);
Makefile
KERNELDIR = /lib/modules/$(shell uname -r)/build
default:
make -C $(KERNELDIR) M=$(shell pwd) modules
clean:
make -C $(KERNELDIR) M=$(shell pwd) modules clean
obj-m += mytimer.o
编译插入模块运行
sudo dmesg查运行输出