C 在内核源代码中添加printk语句后,Linux引导挂起

C 在内核源代码中添加printk语句后,Linux引导挂起,c,linux,ubuntu,linux-kernel,kernel,C,Linux,Ubuntu,Linux Kernel,Kernel,我在内核源代码中添加了一条printk语句。编译和构建内核后,当我启动系统时,它将通过打印语句挂起 printk(KERN_INFO "I'm inside the function!\n"); 我在Ubuntu13.04中使用CoreI3机器,内核版本是3.4.106(我也尝试过其他版本,但同样的情况也发生了)在core 2 duo系统中进行相同的更改时,系统会正常启动。使用trace\u printk()而不是printk()有助于在某些时间关键型功能中保持不混乱 你的指纹应该在ftrac

我在内核源代码中添加了一条printk语句。编译和构建内核后,当我启动系统时,它将通过打印语句挂起

printk(KERN_INFO "I'm inside the function!\n");
我在Ubuntu13.04中使用CoreI3机器,内核版本是3.4.106(我也尝试过其他版本,但同样的情况也发生了)在core 2 duo系统中进行相同的更改时,系统会正常启动。

使用
trace\u printk()
而不是
printk()
有助于在某些时间关键型功能中保持不混乱

你的指纹应该在ftrace缓冲区中

      $ cd /sys/kernel/debug/tracing
      $ cat trace

请参阅“使用trace_printk()”一节

什么功能?在printk之后,你真的得到了零输出吗?这并没有什么可继续的…printk()调用可以睡眠。如果您在中断处理程序内或在旋转锁定头时。然后系统不应该睡眠,这将解释系统挂起的原因。inside context_switch()函数。整个屏幕充满了“我在函数中”,系统挂起。请尝试
trace\u printk()
printk()
确实会在时间关键型函数(如
context\u switch()
Undefined behavior.)中搞砸事情trace_printk可以很好地处理上述语句。现在,我正在尝试打印上下文_切换中涉及的PID。跟踪打印(内核信息“上一个pid=%d,下一个pid=%d\n”,(int)上一个->pid,(int)下一个->pid);我的系统现在正在启动,但我的问题没有得到解决。我无法打印上下文切换中涉及的PID。dmesg没有显示任何带有上述trace_printk语句的消息。修改了答案,请参阅