作者nfsnfs (Busy)
看板LinuxDev
标题Re: [问题] 请问 kernel thread ..
时间Sun Jan 6 20:44:09 2008
※ 引述《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)
1F:推 TroyLee:2.4 or 2.6? 01/06 21:38
2F:→ nfsnfs:kernel 2.6.22.6 ~ 多谢 :) 01/07 00:12
3F:→ ericwan:请用DECLARE_RWSEM() 作initial 01/07 22:27