linux内核--定时器API

/**<linux/timer.h> 定时器结构体
struct timer_list {
    ........
    unsigned long expires; --内核希望定时器执行的jiffies值
    void (*function)(unsigned long);  --定时器到时时执行的函数
    unsigned long data;  --传入执行函数的参数
*/
/**<linux/time.h> 该函数将墙钟时间转换为jiffies值
extern unsigned long mktime(const unsigned int year, const unsigned        
                                int mon, const unsigned int day, 
                                const unsigned int hour, 
                                const unsigned int min, 
                                const unsigned int sec)       
*/

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/timer.h>
#include <linux/time.h>
#include <linux/moduleparam.h>
#include <linux/stat.h>
#include <linux/sched.h>


static int year;
static int mon;
static int day;
static int hour;
static int min;
static int sec;
static long data;
static int flag = 0;
static int time;
static struct timer_list timer;

module_param(year, int, S_IRUGO);
module_param(mon, int, S_IRUGO);
module_param(day, int, S_IRUGO);
module_param(hour, int, S_IRUGO);
module_param(min, int, S_IRUGO);
module_param(sec, int, S_IRUGO);
module_param(data, long, S_IRUGO);
module_param(time, int, S_IRUGO);
module_param(flag, int, S_IRUGO);


void handler(unsigned long data)
{
    int i=0;
    for (i=0; i<10; i++)
    {
        printk(KERN_ALERT "%d ", i);
    }
    printk(KERN_ALERT "\n");
}

static int __init Example_init(void)
{

    unsigned long j = jiffies;

    printk(KERN_ALERT "Example_init.\n");

    init_timer(&timer);   //初始化结构体
    if (flag)
        timer.expires = mktime(year, mon, day, hour, min, sec);
    else
        timer.expires = j + time;
    timer.function = handler;
    timer.data = data;
    add_timer(&timer);  //向内核添加定时器

    return 0;
}

static void __exit Example_exit(void)
{
    printk(KERN_ALERT "Example_exit.\n");
    del_timer(&timer);  //删除定时器
    /**以下函数确保在函数返回时没有其他cpu在运行此定时器函数
     int del_timer_sync(struct timer_list *timer)
     */
    return;
}

MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("Flying");

module_init(Example_init);
module_exit(Example_exit);

转载于:https://www.cnblogs.com/Focus-Flying/p/9279173.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值