linux kernel中timer的使用 http://blog.csdn.net/njuitjf/article/details/16888821

在kernel中如果想周期性的干些什么事情,或者某个特定时间干些什么事情,可以使用timer。
例如像周期性地dump某段buffer的数据等等。

先来看看使用方法。
先定义一个struct timer_list的对象。eg: struct timer_list dump_t;

这个对象相当于一个闹钟,其中包含了时间点,也就是什么时候激活闹钟;一个函数指针,闹钟激活后干活的地方;还有一个void 指针,在闹钟干活的时候可能需要传给它一些当前的数据。

先看使用方法,之后再稍微深入了解一下。
前面定义好了struct timer_list对象,接下来就需要初始化该对象。
调用函数init_timer进行初步初始化。
然后对结构体中的一些成员进行赋值:
  init_timer(&dump_t); // 1. 初始化
  dump_t.function = dump_function; // 2. 绑定到时候要调的函数(timer任务具体的事务)
  dump_t.data = (unsigned long) my_dev; 
  dump_t.expires = jiffies + 2*HZ;    // 3.  设置timer任务激活时间,2秒钟之后timer被激活,如果是n秒,将2*HZ改为n*HZ。
这样就OK了么?
当然没有,需要把timer加到timer list中,也就是要告诉系统,你申请了这么一个timer。
  add_timer(&dump_t); // 4. 告诉系统,你申请了这么一个timer。
  
现在不明白的地方就是timer到了,干活的地方,即dump_function函数。
函数声明:
static void dump_function(unsigned long channel);
其中的实现么,就随意了,看你想让这个timer干些什么活。
注意一点,这个timer只会响应一次,因为jiffies + HZ时间点只有一个。
如果想让此timer周期性地干活,就需要在dump_function函数中重新启动该timer。

启动方法:

dump_function ()

{

  do_your_task();

  del_timer(&dump_t);
   dump_t.function = dump_function;
   dump_t.data = (unsigned long) mydev;
   dump_t.expires = jiffies + 2*HZ;

  add_timer(&dump_t);

}

linux kernel中timer的使用的更多相关文章

  1. 浅析linux内核中timer定时器的生成和sofirq软中断调用流程(转自http://blog.chinaunix.net/uid-20564848-id-73480.html)

    浅析linux内核中timer定时器的生成和sofirq软中断调用流程 mod_timer添加的定时器timer在内核的软中断中发生调用,__run_timers会spin_lock_irq(& ...

  2. 浅析linux内核中timer定时器的生成和sofirq软中断调用流程【转】

    转自:http://blog.chinaunix.net/uid-20564848-id-73480.html 浅析linux内核中timer定时器的生成和sofirq软中断调用流程 mod_time ...

  3. Android 怎样在linux kernel 中读写文件

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  4. Linux kernel中常见的宏整理

    0x00 宏的基本知识 // object-like #define 宏名 替换列表 换行符 //function-like #define 宏名 ([标识符列表]) 替换列表 换行符 替换列表和标识 ...

  5. Linux Kernel中所應用的數據結構及演算法

    Linux Kernel中所應用的數據結構及演算法 Basic Data Structures and Algorithms in the Linux kernel Links are to the  ...

  6. Linux kernel中网络设备的管理

    kernel中使用net_device结构来描述网络设备,这个结构是网络驱动及接口层中最重要的结构.该结构不仅描述了接口方面的信息,还包括硬件信息,致使该结构很大很复杂.通过这个结构,内核在底层的网络 ...

  7. Linux Kernel中获取当前目录方法(undone)

    目录 . 引言 . 基于进程内存镜像信息struct mm_struct获取struct path调用d_path()获取当前进程的"绝对路径" . 基于文件描述符(fd).tas ...

  8. 经典数据结构与算法在经典软件(linux kernel)中的应用

    参考文章:Core Alorgithms deployed linux中的priority search tree数据结构研究 虚拟内存: 1.红黑树,管理与进程关联的vm_area_struct实例 ...

  9. 浅谈Linux Kernel 中循环链表的实现

    前阵子在弄缓存的时候,我们需要将qemu对于磁盘镜像文件写请求串成一个链表,最终将这个链表里面的写请求全部刷回到镜像文件里面,那么我们便需要一个强健,可靠的链表的接口,于是我们仿照Linux 2.4. ...

随机推荐

  1. Common Git command and mean (Windows)

    Config: git config --system git config --global git config --global merge.tool vimdiff Check config: ...

  2. 红外摄像头为什么使用850nm波长红外发射管

    市面上有很多不同波长的红外发射管,其中以850nm和940nm波长为主.那么红外摄像头为什么使用850nm波长红外发射管? 首先,我们来了解一下红外摄像头的相关知识.简单来说红外摄像头是用来感应红外线 ...

  3. Vim 实用技术,第 2 部分: 常用插件(转)

    http://blog.jobbole.com/20619/ 2.1. gzip(压缩文件支持) 作者:Bram Moolenar 网站脚本编号:无(包含在 Vim 的标准发布之中) 安装说明:无 功 ...

  4. POJ2352:Stars

    题目 Stars Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 34016   Accepted: 14839 Descri ...

  5. ruiy_ocfs2

    http://docs.oracle.com/cd/E37670_01/E37355/html/ol_instcfg_ocfs2.html

  6. 滴滴司机:要不是Uber,我买奥迪的45万元不知何时赚回来呢!

    你在专车里看风景,看风景的人在系统上看你.补贴装饰了你的出行,你装饰了平台的梦. 这是移动互联网时代城市人们每天出行的形象写照.受“份子钱”之苦的出租车司机既享受也抗议,一洗“黑车”之名的专职司机满城 ...

  7. Img垂直居中

    IMG垂直居中问题 2011-02-22 10:51:00|  分类: CSS |  标签:垂直居中  div  align  img  vertical  |举报|字号 订阅    转载来自:htt ...

  8. Unity Editor下对资源进行操作时调用AssetModificationProcessor

    public class Test : UnityEditor.AssetModificationProcessor { private static void OnWillCreateAsset(s ...

  9. JavaSE学习总结第27天_反射 & 设计模式 & JDK5、7、8新特性

      27.01  反射_类的加载概述和加载时机 类的加载:当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载:就是指将class文件读 ...

  10. BZOJ 1708: [Usaco2007 Oct]Money奶牛的硬币( dp )

    背包dp.. -------------------------------------------------------------------------------- #include< ...