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.

[FAQ] [参考译文] [常见问题解答] AM62x 与放大器;AM64x:如何使用 CCS 调试 Linux 启动的正在运行的 M4F 内核?

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1188177/faq-am62x-am64x-how-to-use-ccs-to-debug-a-running-m4f-core-that-was-started-by-linux

我使用的是 AM62x 或 AM64x。

我想使用 Code Composer Studio (CCS)来调试在 M4F 上运行的程序。 M4F 已由 Linux 初始化并加载。 我希望 CCS 连接到 M4F 并开始调试已在运行的代码(即、我不希望 CCS 重新启动 M4F 或将新代码加载到 M4F)。

问:为什么我希望 CCS 连接到 M4F 而不复位 M4F?  

如果远程内核(即 M4F)使用与 Linux 的 RPMsg 通信、则 M4F 固件中包含一些有关 RPMsg 的信息。 但是、某些 RPMsg 信息需要由 Linux 提供。 该信息通常由 Linux RemoteProc 和 RPMsg 驱动程序在 Linux 启动时提供。 如果 CCS 在 Linux 启动后将固件重新加载到 M4F、则 CCS 会覆盖 Linux 中的 RPMsg 信息。 如果从 Linux 中删除了 RPMsg 信息、则具有 Linux 内核的 RPMsg 将不起作用。

如果 CCS 需要加载 M4F 固件(而不是 Linux)、并且固件使用 Linux RPMsg、请考虑关闭并重新启动 Linux IPC 驱动 程序、如下所述。

问:如果远程内核固件不使用 RPMsg 该怎么办? 在这种情况下、CCS 能否在不处理 Linux IPC 驱动程序的情况下复位 M4F?  

是的、如果 M4F 固件不需要 Linux 中的信息、CCS 可以重置 M4F 并将新固件加载到 M4F 中。 MCU+ SDK 文档"CCS 启动、加载和运行"下介绍了从 CCS 加载和运行远程核心固件的步骤

问:此示例是否也适用于 R5F 内核?  

同样的概念也适用于 R5F 内核。 但是、某些具体步骤可能需要更改。  

问:如果我对多核主题有另一个问题、该怎么办?

有关多核主题的其他常见问题解答、请参阅 Sitara 多核开发和文档

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

    硬件和软件信息  

    此示例使用 Linux AM62x SDK 8.5和 MCU+ AM62x SDK 8.5中的软件在 AM62x SK EVM 板上进行了测试。

    课前作业:

    下载 Linux 和 MCU+ SDK  

    AM62x: https://www.ti.com/tool/PROCESSOR-SDK-AM62X 

    AM64x: https://www.ti.com/tool/PROCESSOR-SDK-AM64X 

    让 Linux 在 EVM 上运行  

    请遵循 AM62x 入门套件 EVM 快速入门指南 、以使 Linux 在 AM62x EVM 上运行。

    设置 MCU+ SDK 和 CCS  

    按照 MCU+ SDK 文档步骤进行操作、依次选择"Getting Started">"Download、Install and Setup SDK and Tools"和"Download、Install and Setup CCS"。 此处介绍了 SDK 8.5步骤

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

    第1步:在 CCS 中构建远程内核工程  

    采用 MCU+ IPC 项目示例/驱动程序/IPC_rpmsg_echo_Linux/am62x-SK/m4fs0-0_FreeRTOS。

    在 CCS 中打开项目。 构建项目。

    您可以在 MCU+ SDK 文档中找到有关如何在 CCS 中构建工程的步骤。 SDK 8.5链接已在此处。  

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

    步骤2:将二进制文件复制到 Linux 文件系统中、并更新链接

    将.out 文件从 CCS 复制到/lib/firmware.下的 Linux 文件系统中

    启动 EVM。 在终端中、更新 M4 符号链接以指向新的.out 文件。

    AM62x Linux Academy 中介绍了更新远程内核符号链接的步骤。

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

    步骤3:确保固件正常运行  

    重新启动 EVM。

    运行测试以确保 RPMsg 示例正常运行。 按照以下步骤运行 IPC 示例

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

    步骤4:连接 CCS

    插入 JTAG 电缆、然后启动 AM62x 目标配置。

    连接到内核 BLAZAR_Cortex_M4F_1

    加载符号、如下图所示:

    选择复制到 Linux 文件系统的相同.out 文件、并将 Linux 加载到 M4:

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

    步骤5:在 CCS 中设置断点

    在 "CCS Debug"视图中打开 IPC_rpmsg_echo.c。

    转至"IPC_recv_task_main"。

    您是否看到"while (1)"循环?  这是 RTOS 运行任务时 IPC_recv_task_main 任务的位置。

    在 while (1)循环内的某个位置设置断点:

    转到您希望 CCS 停止程序的代码行。 右键单击行号、然后选择 Breakpoint (Code Composer Studio)> Breakpoint:

    您现在应该会在该行号上看到一个蓝色圆圈。 蓝色圆圈表示您在那里有一个断点。

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

    步骤6:测试断点

    现在、让我们运行一些测试。

    在 CCS 中、确保 M4F 内核正在运行(未暂停)。

    在 Linux 终端中、运行 rpmsg_char_Simple 命令。 如下所示:
    rpmsg_char_Simple -r 9 -n 5.

    在 CCS 中、您现在应该会看到 M4F 在您设置的断点处被暂停。

    在 Linux 终端中、您应该会看到终端已在测试过程中暂停。 在您解除 M4暂停之前、Linux 终端不会获得任何 RPMsg 示例更新。

    现在、您可以在 CCS 中浏览 IPC 代码。 当您浏览代码时、您将看到更多行显示在 Linux 终端中。