Linux驅動(三) 核心執行緒

2021-07-14 01:49:54 字數 1048 閱讀 2655

linux驅動(三)——核心執行緒

小狼@一、核心執行緒的建立、執行及結束:

kthread_create() -> wake_up_process() -> kthread_stop()/do_exit()

kthread_run() -> kthread_stop()/do_exit()

kernel_thread() -> daemonize() -> completion() -> wake_up_process() -> kthread_stop()/do_exit()

kthread_stop:設定執行緒的退出標記(執行緒函式內應用int kthread_should_stop(void)函式,當返回真時應退出函式),kthread_stop會一直等待至執行緒結束,執行緒結束前會傳送完成結束給kthread_stop,如果直接使用do_exit直接退出執行緒那麼kthread_stop不會收到完成訊號將一直等待下去。如果執行緒已經退出那麼kthread_stop會先設定退出標記再喚醒一下thread,喚醒執行緒後會判斷退出標記因此設定的處理函式不會被呼叫。如果執行緒已經被喚醒並已經退出那麼kthread_stop會一直等待

二、kthread_should_stop與kthread_stop之間關係

三、注意事項

在呼叫kthread_stop函式時,執行緒函式不能已經執行結束,否則kthread_stop函式會一直進行等待

執行緒函式必須能讓出cpu,以便能執行其他執行緒,同時執行緒函式也必須能重新被排程執行,可以通過schedule_timeout()實現

解除安裝驅動之前,需要先停止核心執行緒,否則可能會導致核心oops

四、效能測試

可以使用top命令來檢視執行緒(包括核心執行緒)的cpu利用率,命令如下:

top -p 執行緒號

可以使用下面命令來查詢執行緒號:

ps aux|grep 執行緒名

linux驅動學習之核心執行緒分析

kthread_create 簡單使用

Linux核心多執行緒(三)

接上一篇文章,這裡介紹另一種執行緒間通訊的方式 completion機制。completion機制是執行緒間通訊的一種輕量級機制 允許乙個執行緒告訴另乙個執行緒工作已經完成。為使用 completion,需要包含標頭檔案 可以通過以下方式來建立乙個 completion declare comple...

linux 核心 驅動

首先 1.建立裝置 分配cdev結構體 if globalmem major 手動分配 ret register chrdev region devno,1,globalmem else globalmem 提供給上層使用 2 建立核心裝置 struct globalmem dev globalme...

新增linux核心驅動

1.將核心驅動.ko放入 lib modules 3.2.0 23 generic kernel drivers 目錄下 2.執行depmod a來解決依賴 掃瞄driver下的驅動依賴關係 命令執行完成後,會自動生成modules.dep 和modules.alias。dep為依賴關係。3.更新當...