Oops! It appears that you have disabled your Javascript. In order for you to see this page as it is meant to appear, we ask that you please re-enable your Javascript!

Linux kernel中timer的使用方法

參考閱讀:
* Linux- 關於timer定時器, delay延遲, sleep睡眠, 與中斷….等等

在內核中如果想週期性的幹些什麼事情,或者某個特定時間幹些什麼事情,可以使用定時器 timer。
例如像週期性地轉儲某段緩衝的數據等等。先來看看使用方法。

先定義一個struct timer_list的對象:

eg:

這個對象相當於一個鬧鐘,其中包含了時間點,也就是什麼時候激活鬧鐘;一個函數指針,鬧鐘激活後幹活的地方;還有一個空指指針,在鬧鐘幹活的時候可能需要傳給它一些當前的數據。

初始化 init_timer(), 以及如何申請一個定時器:

前面看了使用方法,這裡再稍微深入了解一下。
前面定義好了struct timer_list對象,接下來就需要初始化該對象。調用函數init_timer進行初步初始化。
接著, 對結構體中的一些成員進行賦值:

這樣就OK了麼?
當然沒有,需要把定時器加到定時器列表中,也就是要告訴系統,你申請了這麼一個定時器。

  

主要工作的函式, 以及如何重新啟動計時器?

現在不明白的地方就是計時器到了,幹活的地方,即dump_function函數。
函數聲明:
static void dump_function(unsigned long channel);
其中的實現就根據需求各自撰寫程式碼了,看你想讓這個計時器幹些什麼活。
注意一點,這個計時器只會響應一次,因為jiffies + HZ時間點只有一個。

如果想讓此定時器週期性地幹活,就需要在dump_function函數中重新啟動該計時器。
啟動方法:

發表迴響