在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 該檔案有四個數字值,它們根據日誌記錄訊息的重要性,定義將其傳送到何處。關於不同日誌級別的更多資訊,...