2016年10月26日 星期三

Kernel timer 用法

#include <linux/module.h>
#include <linux/init.h>

MODULE_LICENSE("Dual BSD/GPL");

#define TIMEOUT_VALUE (5 * HZ)

static struct timer_list tickfn;

static void sample_timeout(unsigned long arg)
{
    struct timer_list *tick = (struct timer_list *) arg;

    printk(KERN_ALERT "ptr %p\n", tick);

    mod_timer(tick, jiffies + TIMEOUT_VALUE);
}

static int __init sample_init(void)
{
    printk(KERN_ALERT "driver loaded\n");

    init_timer(&tickfn);
    tickfn.function = sample_timeout;
    tickfn.data = (unsigned long) &tickfn;
    tickfn.expires = jiffies + TIMEOUT_VALUE;
    add_timer(&tickfn);

    return 0;
}

static void __exit sample_exit(void)
{
    int ret;
    ret = del_timer_sync(&tickfn);

    printk(KERN_ALERT "driver unloaded (%d)\n", ret);
}

module_init(sample_init);
module_exit(sample_exit);

沒有留言:

張貼留言