linux kernel中timer的使用

2022-09-16 10:45:09 字數 1465 閱讀 9027

在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 voiddump_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中module相關命令集

linux的kernel能夠以動態的方式載入,解除安裝模組,以達到減小核心的大小,複雜度,以及增加核心的靈活性。目前,我知道的有lsmod,insmod,rmmod,modprobe四條命令,現在分別總結記錄這四條命令,命令後的模組名稱均不加字尾 如.ko或.o 1 lsmod 即list modu...

Linux Kernel啟動中引數的處理

1.在bootloader中會以taglist的形式儲存板子mem cmdline cmdline中也可以定義mem資訊 等相關資訊,cmdline通過getenv從環境變數取得 該環境變數是之前使用setenv以字串形式配置 addr和size。跳轉到kernel前,r0 0,r1 proc ty...

修改Linux kernel中列印的級別

有時除錯核心模組,列印資訊太多了,可以通過修改 proc sys kernel printk檔案內容來控制。預設設定是7 4 1 7 cat proc sys kernel printk7 4 1 7 該檔案有四個數字值,它們根據日誌記錄訊息的重要性,定義將其傳送到何處。關於不同日誌級別的更多資訊,...