内核定时器的实现,依赖时钟滴答中断来实现, 实时性比较好
init_timer(); //初始 timer_list 的结构的一些变量
Makefile
运行方法:
init_timer(); //初始 timer_list 的结构的一些变量
add_timer() //将timer 加入内核timer列表中,等待处理
timer_k.c
#include <linux/module.h>
#include <linux/timer.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/jiffies.h>
int count = 0;
char *str = "this is timer: ";
struct timer_list timer;
static void timer_func(unsigned long data)
{
printk(KERN_EMERG "%s %d\n", str, count);
count++;
timer.expires = jiffies + HZ * 3;
timer.data = (unsigned long)count;
timer.function = timer_func;
add_timer(&timer);
return;
}
static int __init timer_k_init(void)
{
init_timer(&timer);
timer.expires = jiffies + HZ * 3;
timer.data = (unsigned long)count;
timer.function = timer_func;
add_timer(&timer);
printk("timer init ok\n");
return 0;
}
static void __exit timer_k_exit(void)
{
del_timer(&timer);
printk("tiemr del\n");
return;
}
module_init(timer_k_init);
module_exit(timer_k_exit);
MODULE_LICENSE ("GPL");
MODULE_AUTHOR ("han");
Makefile
CUR=$(shell pwd)
KERNEL_DIR=/lib/modules/$(shell uname -r)/build
obj-m=timer_k.o
all:
make -C $(KERNEL_DIR) M=$(CUR) modules
clean:
make -C $(KERNEL_DIR) M=$(CUR) clean
运行方法:
# make
# insmod timer_k.ko
# dmesg |grep 'timer'