内核定时器使用例子

1887阅读 0评论2010-01-19 ubuntuer
分类:LINUX

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/version.h>
#include <linux/timer.h>
#include <linux/jiffies.h>
#include <linux/list.h>
#include <linux/spinlock.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("wzt");

#define SLEEP_TIME 2

static struct timer_list my_timer;

typedef struct list_test_struct {
        int count;
        struct list_head list;
}node;

struct list_head head_list;
rwlock_t list_lock = RW_LOCK_UNLOCKED;
unsigned int g_count = 0;

void timer_test(unsigned long data)
{
        node *tmp = (node *)data;

        printk("%5d", tmp->count);

        del_timer_sync(&my_timer);
        timer_init(SLEEP_TIME);
}

int timer_init(unsigned int seconds)
{
        node *s = NULL;

        init_timer(&my_timer);

        s = (node *)kmalloc(sizeof(node), GFP_ATOMIC);
        if (!s)
                return 0;

        write_lock(&list_lock);
        s->count = g_count++;
        list_add_tail(&(s->list), &head_list);
        write_lock(&list_lock);

        my_timer.data = (unsigned long)s;
        my_timer.function = timer_test;
        my_timer.expires = jiffies + seconds * 1000;

        add_timer(&my_timer);
        return 0;
}

int test_timer_init(void)
{
        INIT_LIST_HEAD(&head_list);

        timer_init(SLEEP_TIME);

        return 0;
}

void test_timer_exit(void)
{
        del_timer_sync(&my_timer);

        printk("timer test exit.\n");
}

module_init(test_timer_init);
module_exit(test_timer_exit);


上一篇:内核中得到当前时间
下一篇:VFS层拦截read/write file_operations函数