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.
您好!
到目前为止、我正在使用 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 更新将允许其正确路由。
设置为在内核入口停止以设置驱动程序断点会很有用。 我建议 为此使用 dra829-evm-linux-early-breakpoint-insertion.cmm 示例。 它在 SD 卡引导时运行良好。 如果您正在调试模块、那么在不同的时间使用"感知"下拉菜单应该足够好。
在我在之前分享的脚本中,可以在 ./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 提供商一定会知道详细信息、我只是对我的理解做出评论。
我正在与 LB 提供商进行对话、以准备完全运行和停止模式。
感谢您的支持
您好 Pablo:
这将实现很多调试可能性。 不同的使用方案 将具有不同的工作级别。 在单个地址空间中进行内核驱动程序调试非常简单、使用内核模块需要做的工作要多一些。 有时希望获得良好的用户空间时序信息、因此需要进行更大的努力。 调试器使用多个 地址空间和关联来处理棘手的部分、但为所有进程/线程及其动态/共享库获取所有调试友好对象可能需要一些工作。 对于无法实现的大系统焦点、您需要使用不同的本机工具来定位热点、然后使用调试程序进行放大和聚焦。 最近、我在 TDA4上做的是更低级的 Linux 级别、因此我检查了我们当前的开发人员在做什么。 他们推荐了 Lauterbach pdf 文件(normal debug_info 和 nokaslr)中更多的选项。我们的团队说 CONFIG_CORESIGHT=n 和 ARM_CORESIGT_PMU_arch_system_PMU=n 对当前内核也有帮助。
您好、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 是解决任何工具端问题的一种方法。