Re: [問題] 請問 kernel thread ..

看板LinuxDev作者 (Busy)時間17年前 (2008/01/06 20:44), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串5/6 (看更多)
※ 引述《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)

01/06 21:38, , 1F
2.4 or 2.6?
01/06 21:38, 1F

01/07 00:12, , 2F
kernel 2.6.22.6 ~ 多謝 :)
01/07 00:12, 2F

01/07 22:27, , 3F
請用DECLARE_RWSEM() 作initial
01/07 22:27, 3F
文章代碼(AID): #17WCqRyE (LinuxDev)
文章代碼(AID): #17WCqRyE (LinuxDev)