linux的定时器是一种基于未来时间点的定时器。定时器以现在的时间为起始点,以未来的某一时间为定时器的终点。类似于手机的闹钟,定于7点,响铃之后还想再睡会,可以延期5分钟,到了7点5分就响。
示例:
timer.c编写
cpp
#include <linux/module.h>
#include <linux/init.h>
#include <linux/time.h>
static void timer_function(struct timer_list *timer){
printk("this is timer test\n");
}
DEFINE_TIMER(test_timer,timer_function);
//param1:定时器结构体,param2:到点触发函数
static int helloworld_init(void){
printk("hello timer\n");
test_timer.expires = jiffies_64 + msecs_to_jiffies(5000);
add_timer(&test_timer);
return 0;
}
static void helloworld_exit(void){
del_timer(&test_timer);
printk("bye timer\n");
}
module_init(helloworld_init);
module_exit(helloworld_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("quan");
MODULE_VERSION("v1.0");
Makefile编写
bash
# KBUILD_CFLAGS_MODULE += -DDEBUG=3
EXTRA_CFLAGS += -DDEBUG=3
obj-m += timer.o
KDIR:=/lib/modules/6.2.0-37-generic/build
# KDIR:=/usr/src/linux-source-6.2.0/
PWD?=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
echo $(PWD)
clean:
rm -rf *.ko *.o *.mod *.mod.o *.mod.c *.symvers *.order
编译及测试
bash
sudo make
sudo insmod timer.ko
sudo dmesg
效果
[ 3911.187042] hello timer
[ 3916.191133] this is timer test
可以看出五秒产生一次打印