------------[ cut here ]------------ ?

bigPillow 2015-07-28 09:33:48
背景:

我在给335x打xenomia补丁,xenomai对于linux的补丁文件仅有linux3.2.21.但是板子提供的是linux3.2.0,于是打个小补丁将linux3.2.0升级到linux3.2.21,升级后再打xenomia补丁。

一些就绪后,编译内核生成uImage,通过uboot下载到板子上面

在内核启动后,可以看到不断的打印出启动信息,但是当打印到:

[ 0.000000] NR_IRQS:396
[ 0.000000] IRQ: Found an INTC at 0xfa200000 (revision 5.0) with 128 interrupts
[ 0.000000] Total of 128 interrupts on 1 active controller
[ 0.000000] OMAP clockevent source: GPTIMER2 at 24000000 Hz
[ 0.000000] OMAP clocksource: GPTIMER1 at 24000000 Hz
[ 0.000000] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956ms
[ 0.000000] Interrupt pipeline (release #4)
[ 0.000000] ------------[ cut here ]------------

内核停止打印。

经测试, ------------[ cut here ]------------是由内核目录下的Panic.c (kernel)中的下面函数打印出来的:

static void warn_slowpath_common(const char *file, int line, void *caller,
unsigned taint, struct slowpath_args *args)
{
const char *board;

printk(KERN_WARNING "------------[ cut here ]------------\n");
printk(KERN_WARNING "WARNING: at %s:%d %pS()\n", file, line, caller);
board = dmi_get_system_info(DMI_PRODUCT_NAME);
if (board)
printk(KERN_WARNING "Hardware name: %s\n", board);

if (args)
vprintk(args->fmt, args->args);

print_modules();
dump_stack();
print_oops_end_marker();
add_taint(taint);
}

现在有个很奇怪的问题,通过上面的信息,看不出是哪里出错才打印出来。

于是我有添加了几个参考打印点:

static void warn_slowpath_common(const char *file, int line, void *caller,
unsigned taint, struct slowpath_args *args)
{
const char *board;

printk(KERN_WARNING "mark0\n");
printk(KERN_WARNING "------------[ cut here ]------------\n");
printk(KERN_WARNING "mark1\n");

printk(KERN_WARNING "WARNING: at %s:%d %pS()\n", file, line, caller);


board = dmi_get_system_info(DMI_PRODUCT_NAME);

此时有个奇怪的现象,内核在启动信息里只打印出了:

[ 0.000000] NR_IRQS:396
[ 0.000000] IRQ: Found an INTC at 0xfa200000 (revision 5.0) with 128 interrupts
[ 0.000000] Total of 128 interrupts on 1 active controller
[ 0.000000] OMAP clockevent source: GPTIMER2 at 24000000 Hz
[ 0.000000] OMAP clocksource: GPTIMER1 at 24000000 Hz
[ 0.000000] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956ms
[ 0.000000] Interrupt pipeline (release #4)
[ 0.000000] mark0

然后停止。不在打印出后面其他要打印出来的信息。

然后,我屏蔽点本函数的打印信息,如下:

static void warn_slowpath_common(const char *file, int line, void *caller,
unsigned taint, struct slowpath_args *args)
{
const char *board;
/*
printk(KERN_WARNING "mark0\n");
printk(KERN_WARNING "------------[ cut here ]------------\n");
printk(KERN_WARNING "mark1\n");
printk(KERN_WARNING "WARNING: at %s:%d %pS()\n", file, line, caller);
*/

board = dmi_get_system_info(DMI_PRODUCT_NAME)

则可以通过内核启动信息看到:

0.000000] NR_IRQS:396
[ 0.000000] IRQ: Found an INTC at 0xfa200000 (revision 5.0) with 128 interrupts
[ 0.000000] Total of 128 interrupts on 1 active controller
[ 0.000000] OMAP clockevent source: GPTIMER2 at 24000000 Hz
[ 0.000000] OMAP clocksource: GPTIMER1 at 24000000 Hz
[ 0.000000] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956ms
[ 0.000000] Interrupt pipeline (release #4)
[ 0.000000] 这里出现一句其他函数的 printk信息

然后内核启动停止。


请问这是什么原因。
...全文
1647 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigPillow 2015-07-30
  • 打赏
  • 举报
回复
引用 1 楼 nswcfd 的回复:
楼主“看到的”打印,要么是控制台的输出,要么是串口的输出吧? 估计要么printk内部有queue,或者console/serial内部有队列, 虽然printk函数把字符串传递进去,但在真正反映到屏幕或者串口上之前,Kernel进入了hang状态。 以上纯属猜测,没有任何依据。
现在是,内核在打印出 [ 0.000000] Interrupt pipeline (release #4) 后,不管后面是什么代码,只要遇见一个printk(无论printk前后是什么代码),Kernel就进入了hang状态.
nswcfd 2015-07-29
  • 打赏
  • 举报
回复
楼主“看到的”打印,要么是控制台的输出,要么是串口的输出吧? 估计要么printk内部有queue,或者console/serial内部有队列, 虽然printk函数把字符串传递进去,但在真正反映到屏幕或者串口上之前,Kernel进入了hang状态。 以上纯属猜测,没有任何依据。
内容概要:本文详细介绍了利用Simulink进行变压器开路试验的电路连接配置与仿真实现方法,重点在于通过仿真手段还原实际电力系统中变压器在空载条件下的电气特性,从而深入理解其工作原理与性能表现。文章作为电力系统仿真系列研究的一部分,系统阐述了从电路模型搭建、参数设定、仿真运行到结果分析的完整流程,突出展示了MATLAB/Simulink在电力设备建模与教学科研中的强大功能与应用价值。; 适合人群:具备电力系统基础知识,熟悉MATLAB/Simulink仿真环境,从事电气工程、自动化及相关领域的研发人员,以及高年级本科生和研究生。; 使用场景及目标:①掌握变压器开路试验的基本原理与Simulink仿真建模的具体步骤;②通过仿真实验深入理解空载电流、铁芯损耗及励磁特性等关键参数的物理意义;③为后续开展变压器短路试验、暂态过程分析以及其他电力设备的仿真研究奠定理论与实践基础。; 阅读建议:建议结合Simulink软件动手实践,逐步构建并调试电路模型,重点关注各元件参数的设置方法与测量模块的应用技巧,同时推荐参考文中提及的其他相关仿真案例进行拓展学习,以全面提升对电力系统仿真实践的整体认知与操作能力。

4,469

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧