Linux Kernel時序的三種機制

2021-05-21 18:19:15 字數 998 閱讀 7475

最近在寫driver時,常常遇到需要「等待一段時間」再處理的動作,以往我都傻傻的用msleep()或mdelay(),殊不知這種busy waiting會hold住cpu資源,在這段期間內都無法讓給其他process執行,時間短(10ms以下等級)或許還可以,太長就不行了,所以需要kernel本身就有提供的「時序」機制來做處理,於是我漸漸學會了如何使用timer、tasklet和workqueue的用法,在o'reilly

的linux device drivers

struct timer_list

void

int

int

int

int

void (*func)(unsigned long);

unsigned long data;

};void

void (*func)(unsigned long), unsigned long data);

void

void

void

void

void

void

1.建立工作佇列

struct workqueue_struct *

struct workqueue_struct *

2.建立工作

3.提交工作給乙個工作佇列

int

int

int

void

4.刪除佇列

void

1.建立工作

同非共享

2.提交工作給乙個工作佇列

int

int

void

[zz 請翻牆]

關於linux kernel的死法

最近在除錯linux核心驅動,宕機無數次。關於linux的死法也有些心得。1 嘎嘣兒脆型。特點 啥提示也沒有,說宕就宕,var log messages 裡邊啥提示資訊也沒有。原因 八成是你自己沒玩兒好,在kernel裡邊記憶體越界了。還有兩成是超過了linux核心棧8k的限制。2 半死不活型。特點...

Linux kernel 關機的底層操作

linux關機相關命令如 halt,shutdown,poweroff和reboot 其實它們底層都是呼叫名為reboot的system call,其具體實現是在核心目錄的kernel sys.c中的 syscall define4 reboot,int,magic1,int,magic2,unsi...

linux kernel 模組時鐘的用法

2012 01 31 14 27 7人閱讀 收藏 舉報 kernel 2.6.13各個模組時鐘的用法 2009 10 15 17 06 分類 驅動入門 逢山開路 遇水架橋,今天想自己寫個adc的驅動,發現不清楚系統各個模組的系統時鐘如何使用。總不能自己想怎麼弄,就怎麼弄吧,還是學學框架吧 使用時鐘的...