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.

[参考译文] TDA4VM:在 TDA4上使用操作系统识别功能调试 A72-Linux

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1272443/tda4vm-debug-a72-linux-on-tda4-using-os-awareness-in-t32

器件型号:TDA4VM
主题中讨论的其他器件:DRA829TDA2

您好!  

到目前为止、我正在使用 GDB 在 Linux 中调试一些应用。

但现在我想对在 J721E EVM (在 A72内核中)上运行的开发中的内核和模块进行调试。  

我已经说过,我们必须使用 vmlinux 文件来加载所有相关符号,但是,我已经尝试创建合适的 cmm 来运行,但没有明确的结果。

在 t32部署中、我认为与 TDA4架构无关:

你有什么 CMM 脚本可以这样做吗?

Br

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

    您好 Pablo:

    在我之前分享的脚本中、可以在以下位置找到 TRACE32停止模式调试示例 :.cmm-tda4_dra829/MPU-a72/onchip_trace/processor_trace/、例如:dra829-evm-linux.cmm。  这些功能对于内核驱动程序和模块很有效。  您需要确保 vmlinux 已使用标志 CONFIG_PID_IN_CONTEXTIDR=y 和 CONFIG_DEBUG_INFO=y 进行编译。  您应该能够通过在构建区域中更改配置片段来获得这些代码。  生成的 vmlinux 将从~20MB 变为100MB 以上。  结束映像代码不会更改、但调试器需要的目标文件中包含许多代码和结构信息。

    如果您希望执行运行模式调试(使用 TRACE32的 GUI 与 gdbserver 通信)、您也可以这样做。  与停止模式调试相比、在某些情况下使用内核辅助调试更自然。  可同时使用 STOP 和 RUN 模式。  PDF 集说明了具体操作方法。  对于运行模式调试、您为其提供了要连接的 IP 地址和端口。  LB 发行版提供了一个可以在目标上使用的 gdbserver 二进制文件。  我发现对于 GDB 的一些发行版和版本、很难找到一个有效的编译器、在这些情况下、LB 二进制在其他路径失败的情况下也有效。

    如果您要在 TDA4VM EVM 上将片外跟踪与 Linux 内核结合使用、还需要确保信号通过 FET 多路复用器路由到 MIPI-60。  默认情况下、Linux 将信号路由设置为子卡。  DT 更新将允许其正确路由。

    a/k3-j721e-common-proc-board.dts b/k3-j721e-common-proc-board.dts
    ---K3-j721e-common-proc-board.dts 2021年01月28日14:54:52.415495991 -0800
    ++ b/k3-j721e-common-proc-board.dts             2021年01月28日14:53:39.463212359 -0800
    @@-611,7 +611,7 @@
                                              /* P12 - MCASP/TRACE_MUX_S1 */
                                              GPIO-HOG;
                                              GPIO =<10 GPIO_ACTIVE_HIGH>;
    -                                         输出低电平;
    +                                        输出高电平;
                                              line-name ="MCASP/TRACE_MUX_S1";
                               };
                };

    设置为在内核入口停止以设置驱动程序断点会很有用。  我建议 为此使用 dra829-evm-linux-early-breakpoint-insertion.cmm 示例。  它在 SD 卡引导时运行良好。  如果您正在调试模块、那么在不同的时间使用"感知"下拉菜单应该足够好。

    一些有用的链接可能是:
     
    此致、
    理查德·W·
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在我在之前分享的脚本中,可以在 ./cmm-tda4_dra829/mpu-a72/onchip_trace/processor_trace/中找到 TRACE32停止模式调试示例,例如:dra829-evm-linux.cmm。  这些功能对于内核驱动程序和模块很有效。  您需要确保 vmlinux 已使用标志 CONFIG_PID_IN_CONTEXTIDR=y 和 CONFIG_DEBUG_INFO=y 进行编译。  您应该能够通过在构建区域中更改配置片段来获得这些代码。  生成的 vmlinux 将从~20MB 变为100MB 以上。  结束映像代码不会更改、但调试程序需要的目标文件中包含大量代码和结构信息。

    您好、Richard。

    我在编译时激活了这些标记。 然后我会检查、但尺寸比您说的要大得多...

    非常感谢跟踪问题、这之前已经在中考虑过: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1192456/j721excpxevm-trace-lines-multuiplexed-with-deserializer-in-jacinto7-j721e-dra829-tda4vm-evaluation-module.f

    非常感谢您提供文档列表。 我已咨询西班牙 Lauterbach 提供商 、了解是否需要许可证才能使用运行及停止模式。

    我会在收到结果后立即通知。

    非常感谢

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

    您好 Pablo:

    是的,你的 vmlinux 比我想象的要大得多。  在我的本地使用中、它通常从20MB 变为~120MB。  我想这取决于构建中的所有内容。  您的定制系统可能包含许多器件。  或者您可能正在执行类似使用 LLVM 的操作、而我只使用 GCC。

    使用 HLOS 调试功能不需要任何不同的许可证。  通常需要的是架构+线迹+多核。  如果您的电缆具有多种内核类型、则推断您不需要多内核。  您的 LB 提供商一定会知道详细信息、我只是对我的理解做出评论。

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

    我正在与 LB 提供商进行对话、以准备完全运行和停止模式。

    感谢您的支持

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

    您好 Pablo:

    这将实现很多调试可能性。 不同的使用方案 将具有不同的工作级别。 在单个地址空间中进行内核驱动程序调试非常简单、使用内核模块需要做的工作要多一些。 有时希望获得良好的用户空间时序信息、因此需要进行更大的努力。  调试器使用多个 地址空间和关联来处理棘手的部分、但为所有进程/线程及其动态/共享库获取所有调试友好对象可能需要一些工作。 对于无法实现的大系统焦点、您需要使用不同的本机工具来定位热点、然后使用调试程序进行放大和聚焦。  最近、我在 TDA4上做的是更低级的 Linux 级别、因此我检查了我们当前的开发人员在做什么。 他们推荐了 Lauterbach pdf 文件(normal debug_info 和 nokaslr)中更多的选项。我们的团队说 CONFIG_CORESIGHT=n 和 ARM_CORESIGT_PMU_arch_system_PMU=n 对当前内核也有帮助。

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

    您好、Richard。

    根据 LB 提供商的说明、运行模式需要附加许可证、并且不受限制、对于我们所需的运行 T32的方法是使用"PBI=GDB"。 这根本没用,因为我们可以免费使用其他 IDE 中的 GDB。

    对于 Stop 模式(允许调试内核和驱动程序)、不需要附加模式。

    我要求的 Run&stop 不需要附加许可证,这对于调试进程(运行内核的 User Space,以及在同一实例中进行驱动程序调试)非常有用。

    LB 在其文档(https://repo.lauterbach.com/publications/integrated_run_and_stop_mode_debugging_for_embedded_linux.pdf、https://www2.lauterbach.com/pdf/rtos_linux_run.pdf)中描述了这种"双"模式、但由于我发现运行它的许多问题、询问后、他们 (提供商)确认此模式不可用。  

    你用它做过实验吗? 或者您是否为 GDB 和 STOP 模式打开不同的实例?

    非常感谢

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

    您好 Pablo:

    我注意到您的最后一个问题没有得到答复。  当我是 OOO 的时候,它似乎出现了。 我在处理 TDA2 (armv7)上的一个复杂问题时最后使用了 GDB+Stop。  我不必在 TDA4 (ARMv8)上为我研究的问题做同样的事情。 对于一些需要解决的复杂问题、我确实发现将系统导出到 LB 是解决任何工具端问题的一种方法。

    此致、
    理查德·W·
x 出现错误。请重试或与管理员联系。