Timer API linux

时间:2018-06-17 09:34:07

标签: linux linux-kernel linux-device-driver

我正在学习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

为什么会这样?

0 个答案:

没有答案