我正在为 linux 内核模块编写代码并在其中遇到奇怪的行为。这是我的代码:
int data = 0;
void threadfn1()
{
int j;
for( j = 0; j < 10; j++ )
printk(KERN_INFO "I AM THREAD 1 %d\n",j);
data++;
}
void threadfn2()
{
int j;
for( j = 0; j < 10; j++ )
printk(KERN_INFO "I AM THREAD 2 %d\n",j);
data++;
}
static int __init abc_init(void)
{
struct task_struct *t1 = kthread_run(threadfn1, NULL, "thread1");
struct task_struct *t2 = kthread_run(threadfn2, NULL, "thread2");
while( 1 )
{
printk("debug\n"); // runs ok
if( data >= 2 )
{
kthread_stop(t1);
kthread_stop(t2);
break;
}
}
printk(KERN_INFO "HELLO WORLD\n");
}
基本上我试图等待线程完成然后打印一些东西。上面的代码确实实现了该目标,但"printk("debug\n");"
没有注释。一旦我注释掉printk("debug\n");
运行代码而不进行调试并通过 insmod 命令加载模块,模块就会挂起,并且它似乎在递归中丢失了。我不为什么 printk 会以如此大的方式影响我的代码?
任何帮助,将不胜感激。
问候。