看板 LinuxDev 關於我們 聯絡資訊
※ 引述《prototype (江山如此多嬌)》之銘言: : ※ 引述《nfsnfs (Busy)》之銘言: : : 請問可以去哪裡找 kernel thread 怎麼寫呀 orz : : 我找不到太多資料 :Q : : 我想要自己新增一個 kernel thread 來處理我在其他 system call 新增的訊息 : : http://www.linux-mag.com/id/2195/ : : http://www.linuxquestions.org/linux/articles/Technical/Linux_Kernel_Thread : : 目前小弟找到的是這兩個網頁感覺比較有參考價值.. : : 先感謝大家了 :) : 寫一個 kernel module,然後 insert 到核心裡就可以了, : 可以做成 driver 的形式,基本上是很簡單的。 我嘗試寫了一個很簡單的 kernel thread, 可是總是會在 read_lock 的時候跳出錯誤訊息, 然後 kernel thread 有跑,但是跑一陣子就會整台電腦 freeze 了 @_@" 以下附上錯誤訊息和 source code,希望哪位可以指正我做錯的地方,感恩 :) error message: BUG: rwlock bad magic on CPU#0, test_thread/2784, c078c59c [<c04d9eaf>] _raw_read_lock+0x16/0x25 [<c05b7b90>] test_thread+0x0/0x7c [<c05b7bed>] test_thread+0x5d/0x7c [<c05b7b90>] test_thread+0x0/0x7c [<c0404927>] kernel_thread_helper+0x7/0x10 ======================= source code: rwlock_t myevent_lock; int test_thread (void *unused) { int num; current->test_thread.enable = 1; daemonize ("test_thread"); allow_signal (SIGKILL); for (;;) { set_current_state (TASK_INTERRUPTIBLE); schedule_timeout(30); if (signal_pending (current)) break; num = current->test_thread.num; read_lock (&myevent_lock); if (num > 0) { read_unlock (&myevent_lock); printk("Debug: num = %d\n", num); } else { read_unlock (&myevent_lock); } } set_current_state (TASK_RUNNING); return 0; } -- http://nfsnfs.pixnet.net 灰熊。紅襪。阿森納。 http://nfstry.blogspot.com 海邊。天空 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.126.2.182 ※ 編輯: nfsnfs 來自: 122.126.2.182 (01/06 20:45)
TroyLee:2.4 or 2.6? 01/06 21:38
nfsnfs:kernel 2.6.22.6 ~ 多謝 :) 01/07 00:12
ericwan:請用DECLARE_RWSEM() 作initial 01/07 22:27