This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] PROCESSOR-SDK-AM437X:Linux 内核停止

Guru**** 2538950 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/899734/processor-sdk-am437x-linux-kernel-stall

器件型号:PROCESSOR-SDK-AM437X

我们有一个定制板、AM437X 运行 TI Linux 4.14.79

此问题经常发生、但我们没有可重现的情形。 所有进程和工作队列突然停止运行

我们可以触发 SysRq 并通过串行控制台转到 kgdb、所有线程都位于 context_switch 中:

 ID 目标 ID     帧

1  内核/debug/debug_core.c:1071中 arch_kgdb_breakpoint()内的 Thread 4294967294 (shadowCPU0) 0xc01ae060

 2  线程1 (初始化) context_switch (rf= ,NEXT = ,prev= ,rq= )内核/sched/core.c:2811

 3  线程2 (kthreadd) context_switch (rf= ,NEXT = ,prev= ,rq= )内核/sched/core.c:2811

 4  线程4 (kworker/0:0h) context_switch (rf= ,NEXT = ,prev= ,rq= )内核/sched/core.c:2811

其中一个线程:

#0 context_switch (rf= ,NEXT = ,prev= ,rq= )内核/sched/core.c:2811

#1 __schedule (抢占= )内核/sched/core.c:3384

#2 0xc085ba70 in schedule () at kernel/sched/core.c:3428

#3 0xc085f760 in schedule_hrtimeout_range_clock (expires = 0x0、delta = 、mode=HRTIME_MODE_ABS、clock=1)在内核/时间/hrtimer.c:1716

#4 在 schedule_hrtimeout_range (expires =中的0xc085f7f4 ,Δ= ,mode= )内核/时间/小时计时器.c:1761

否则一切看起来都正常、KDB/kgdb 在串行控制台上工作、但线程未调度

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您可以尝试在 TI 电路板上运行内核吗? 您在那里看到的是相同的东西吗?

    您似乎没有发现任何内核操作或恐慌?

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、没有内核操作或参数、它不再安排任何操作

    有时我们看到"INFO:RCU_PRE占用 CPU 上自检测到的停止"、我假设它在最终重新开始调度时发生、并且 RCU_PRETERSTALL 注意到它没有被安排很长时间。 但这种情况很少见、通常只会保持此状态

    我们的运行负载不是特别高、并且我们也不会将线程优先级提高到默认值以上

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在 TI 电路板上运行内核的情况如何? 这将有助于确定此处是否存在一些硬件贡献。

    此外、您是否能够附加正在运行的内核的完整日志?

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们无法在 TI 电路板上运行此内核、我们的定制电路板具有不同的硬件集。 但该内核来自 TI SDK 版本

    我附加了2个日志- stall1.log 中的 STALL 由 RCU_PREOVIT 检测到、而在 stall2.log 中、未检测到、系统一直处于停滞状态、直到我执行 SysRq e2e.ti.com/.../stall.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您如何配置内核选项? 建议从 tisdk_AM437X-EVM_defconfig 开始、然后根据您的需求进行调整。

    是否使用 Processor SDK 软件包中提供的根文件系统? 内核日志显示 PM 固件 AM335x-pm-firmware.elf 无法加载、此文件是否存在于根文件系统中?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们构建自己的根文件系统。 我们不加载 cm3固件、也不使用任何 cm3功能。

    我们还关闭了 CONFIG_NO_Hz 和 CONFIG_CPU_IDLE、但它没有帮助。 请参阅内核配置 e2e.ti.com/.../3365.config.gz

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我将您的内核配置与默认的 tisdk_AM437X-EVM_defconfig 进行了比较、没有太大差异、主要是您禁用了一些与网络相关的选项。 我在那里看不到任何可疑情况。

    您的电路板上使用的振荡器的频率是多少? 您是否使用 RTC?

    您能否在最新的 Processor SDK 版本中使用内核 v4.19进行测试、以查看问题是否仍然发生?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它是24MHz、我们使用 RTC:

    [0.000000]   OMAP 时钟事件源:timer2为24000000 Hz
    [0.000013]   sched_clock:24MHz 时为32位、分辨率为41ns、每89478循环一次
    484971ns
    [0.000033]   时钟源:Timer1:屏蔽:0xFFFFFFFF max_cycles:0xFFFFFFFF、max
    _didle_ns:79635851949 ns
    [0.000043]   OMAP 时钟源:Timer1为24000000 Hz
    [0.000517]   时钟源:32K_COUNTER:MASK:0xFFFFFFFF max_cycles:0xFFFFFFFF
    、max_didle_ns:58327039986419ns
    [0.000528]   OMAP 时钟源:32768Hz 时32K_COUNTER

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Mikhail Shoykher"]它是24 MHz,我们使用的是 RTC:

    好的、这与 EVM 上的相同、因此无需更改软件。

    您能否在最新的 Processor SDK 版本中使用内核 v4.19进行测试、以查看问题是否仍然发生?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Mikhail Shoykher"]我们构建了自己的根文件系统。 我们不加载 cm3固件、也不使用任何 cm3功能。

    请将 cm3 PM 固件  AM335x-pm-firmware.elf 添加到/lib/firmware 下的根文件系统中、然后再次测试以查看问题是否仍然发生。 所有空闲低功耗模式都需要此固件、因此如果没有固件、我不确定系统的行为方式、如果没有固件、我们不会验证 Linux。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢你

    我们现在使用4.19和 cm3固件运行测试