我正在学习Linux中的计时器。 我为Timers编写了以下基本模块:
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>
#include<linux/timer.h>
static struct timer_list my_timer;
void my_time_callback(unsigned long data)
{
printk(KERN_INFO "%s has data %ld with %ld",__FUNCTION__,data,jiffies);
}
static int __init my_init(void)
{
int ret;
printk(KERN_INFO "Timer module is loading\n");
setup_timer(&my_timer,my_time_callback,1);
ret=mod_timer(&my_timer,jiffies+msecs_to_jiffies(1000));//1000 milli-seocnd in the future
if(ret)
printk(KERN_INFO "Error in loading Timer module\n");
return 0;
}
static void __exit my_exit(void)
{
int ret;
ret=del_timer_sync(&my_timer);
if(ret)
printk(KERN_INFO "Timer module is still in use\n");
printk(KERN_INFO "Timer module uninstalling\n");
return;
}
module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");
编译没有问题。 问题出在 my_time_callback 上。 它并没有像我指定的那样被调用。
来自dmesg的以下日志:
[53647.566806] Timer module is loading
[53376.367286] my_time_callback has data 1 with 4308221577
[53657.602750] my_time_callback has data 1 with 4308291808<6>[53686.687330] Timer module uninstalling
[53692.505214] Timer module is loading
加载模块后, my_time_callback 被调用(但是2次),然后 我卸载了模块并重新加载。但这次没有调用 my_time_callback 。
为什么会这样?