测试环境:openEuler 22.03 LTS x86_64架构
内核版本:5.10
测试代码:
// timer_test.c
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/timer.h>
#include <linux/jiffies.h>
static struct timer_list timer;
void callback_func(struct timer_list *timer)
{
printk("callback_func called!\n");
mod_timer(timer, jiffies + msecs_to_jiffies(2000));
}
static int __init timer_test_init(void)
{
timer_setup(&timer, callback_func, 0); /*初始化内核定时器 */
timer.expires = jiffies + msecs_to_jiffies(2000); /* 每隔2秒执行一次 */
add_timer(&timer);
return 0;
}
/* 退出函数 */
static void __exit timer_test_exit(void)
{
printk(KERN_INFO "delete timer!\n");
del_timer_sync(&timer); /* 删除定时器 */
}
module_init(timer_test_init);
module_exit(timer_test_exit);
MODULE_LICENSE("GPL");
Makefile如下:
obj-m+=timer_test.o
CONFIG_MODULE_SIG=n
all:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean
测试结果:
参考资料: