linux内核中的定时器

linux内核中的定时器的例子

mytimer.c

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

#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/mm.h>
#include <linux/ioport.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/device.h>

#include <asm/io.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("zl");

typedef struct mytimer_s {
    struct timer_list timer;
    long data;
} mytimer_t;

mytimer_t mytimer;
static void timer_handle(struct timer_list *timer)
{
    mytimer_t *timerptr = container_of(timer, mytimer_t, timer);
    timerptr->data += 1;
    mod_timer(timer, (jiffies + timerptr->data * HZ));
    printk("timer handle... data = %ld\n", timerptr->data);
}
static int test_init(void)
{
    int ret = 0;
    timer_setup(&(mytimer.timer), timer_handle, 123);
    mytimer.timer.function = timer_handle;
    mytimer.timer.expires = jiffies + 1 * HZ;
    add_timer(&(mytimer.timer));
    mytimer.data = 0;

    printk("timer handle...\n");
    return ret;
}

static void test_exit(void)
{
    printk("test exit!\n");
}

module_init(test_init);
module_exit(test_exit);

Makefile

KERNELDIR = /lib/modules/$(shell uname -r)/build

default:
	make -C $(KERNELDIR)	M=$(shell pwd)	modules
clean:
	make -C $(KERNELDIR)	M=$(shell pwd)	modules clean

obj-m	+= mytimer.o

编译插入模块运行

sudo dmesg查运行输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值