03 26 |
kernel space coding-如履薄冰作者: Joey 日期: 2009-03-26 09:52 |
有碰過kernel code的人大概多少都瞭解我標題的意思,kernel code很迷人,但很危險,稍不小心,就會被kernel panic拖進地獄
拿我最近review的code當例子,截取某一段code如下,這是一段相當簡單的kernel threading code,當kernel module被insert時,會開啟kernel thread執行thread_main這個function,當remove module時,會呼叫delete_thread把kernel thread砍掉,可以仔細看看thread_kill這段function,有沒有什麼問題
thread_kill這個function寫的很怪,依照這段code的寫法,它會嘗試判斷th->dead是否被設1,和try是否小於5,如果條件不合,會繼續把th->kill設為1並再沉睡一段時間
問題點一:有沒有可能kernel thread已經結束但thread_kill還是繼續執行(Yes)
問題點二:有沒有可能kernel thread根本沒砍掉但程式已經執行到kfree( del_thread ) (Yes)
上面的問題二情況比較嚴重,如果沒有在rmmod時當機,那一定在將來的某個時間點當掉,為什麼?當kernel thread從沉睡中醒來(有可能被kernel signal interrupt),發現它的th->xxx…等變數都不見了,那執行th->user_func()的結果就是當機
針對kernel thread的終結方法,我這邊建議用waiting completion的方式,所以我建議這段程式更改如下
![]() |
不好意思,我想請問一下,有關於要 compile 自己寫的 kernel code 一定要重新 compile kernel 一次才能知道自己寫的 kernel code 是否有錯呢? |
![]() |
不好意思,在打擾一下, 您的意思是說普通 compile 自己所寫的kernel code 就可以了嗎(已沒有修改到 kernel header files 的情況下,也就是不修改 linux/xxx.h 裡面的內容) 在編譯的時候 gcc -o... xxx.c 這邊都不用添加其他指令嗎? |
Regular expression-跟brainfuck差不多的東西 (2009-11-13 15:37)
Reading file in kernel-簡單但實用 (2009-10-13 15:18)
Linux file system for dummies-只花你45分鐘 (2009-08-19 15:40)
OPENSSL-TCP SSL初心者之路 (2009-07-16 15:16)
NAPI與pure interrupt driver的效能比較 (2009-04-29 19:06)
usermode helper-來自kernel的呼喚 (2009-04-21 16:19)
kernel module memory detector-抓出有害的kernel module (2009-03-31 13:50)
readahead與posix_advise-預讀取是萬能靈丹? (2009-03-06 15:54)
Who call me – kernel版 (2009-02-19 10:53)