1. 程式人生 > 實用技巧 >Linux 驅動的 雜亂函式記錄

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;

待續...