Linux 驱动的 杂乱函数记录

1.DECLARE_WAIT_QUEUE_HEAD

/* 定义并初始化一个等待队列头 */
1.static DECLARE_WAIT_QUEUE_HEAD(waiter);
static int i2c_flag ; //定义一个全局唤醒变量
2.wait_event_interruptible(waiter, i2c_flag != 0); //唤醒变量 != 0,则执行这句之后代码

在特殊的地方唤醒等待队列
3.wake_up_interruptible(&waiter);
i2c_flag = 1;

2.timer_list 内核定时器

1.struct timer_list timer; //定义定时器
2.setup_timer(timer, fn, data) //设置超时函数,源代码如下:
static inline void setup_timer(struct timer_list * timer, void (*function)(unsigned long), unsigned long data)
{
  timer->function = function; 
  timer->data = data; //回调函数的参数
  init_timer(timer);
}

3.void add_timer(struct timer_list *timer) //注册定时器
  int del_timer(struct timer_list *timer) //删除

4.int mod_timer(struct timer_list *timer, unsigned long expires) //设置事件 如:
 mod_timer(&timer, jiffies+Hz/100);定时10ms

3.内核时钟概念 摘抄来自:(对linux内核中jiffies+Hz表示一秒钟的理解

1.时钟分为硬件时钟(实时时钟)和软件时钟(系统时钟)

2.节拍率其实就是系统定时器产生中断的频率,所谓频率即指中断每秒钟产生多少次,即Hz(赫兹)。不同的体系结构的系统而言,节拍率不一定相同。
节拍率(Hz)的值可以在文件include/asm-x86/param.h中看到,定义如下:
#define  Hz 1000

3.节拍 :节拍就是指系统中连续两次时钟中断的间隔时间,该值等于节拍率分之一,即1/Hz。因为系统再启动时已经设置了Hz,所以系统的节拍也可以确定。内核正是利用节拍来计算系统时钟和系统运行时间的

4.jiffies在内核中是一个全局变量,它用来统计系统启动以来系统中产生的总节拍数,这个变量定义在include/linux/jiffies.h中,定义形式如下。
unsigned long volatile jiffies;

待续...

原文地址:https://www.cnblogs.com/rootshaw/p/13572826.html