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.

[参考译文] CCS/TM4C1294NCPDT:GCC 引导加载程序链接器脚本和指南

Guru**** 2482105 points
Other Parts Discussed in Thread: ENERGIA

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/707129/ccs-tm4c1294ncpdt-gcc-bootloader-linker-script-and-guidance

器件型号:TM4C1294NCPDT
主题中讨论的其他器件:Energia

工具/软件:Code Composer Studio

你好。

过去几天、我一直在努力弄清楚如何为基于 RAM 的引导加载程序编写链接器脚本。 我的主应用程序固件使用一些混合 C/C++代码(主要是 Energia 库)编写、并且链接器和启动脚本可以正常工作。

我意识到、TIvaN/bootloader 目录中有引导加载程序的示例。 仅限、其中没有一个适用于 GCC...

也许我应该解释我的意图。 我希望有一个基于 RAM 的引导加载程序利用 Petite FatFS 来安装 SD 卡、并从.bin 文件刷写应用固件。

我甚至不知道从一个简单的意义上讲、从哪里开始... Code Composer Studio 和 TI 的编译器与 GCC 有很大不同。 我在这些论坛的其他地方找到了示例代码、但它们都适用于不同的 IDE 或不完整的 IDE。

我有很多问题...

使用.S (汇编启动文件)时、CCS 如何知道如何使用它?

如果引导加载程序没有 main、如何编写链接器脚本/启动代码?

我最主要的问题之一:如何了解为什么 C 的 GNU 连接器脚本与 C++的脚本不同? 如何学习如何编写? 我想我找不到所需的参考资料。

我已经阅读了引导加载程序用户指南、其中显示"bl_link.ld - CodeRed、gcc 或 sourceygxx 编译器用于构建引导加载程序时使用的链接器脚本。" 但是当我打开该文件时,顶部显示“bl_link.ld - GNU 工具的散点文件”... 什么是散点文件?

是否有一个示例、其中包含用于 GNU GCC 的基于 RAM 的引导加载程序及完整源代码、链接器脚本和启动文件、以及由前者加载的匹配应用项目? 或者可能是关于构建相同系统的说明? 我想使用 CCS 上传代码、使用 GNU GCC 作为编译器和链接器、并保留进行调试的能力...

这使我感到沮丧 我当然希望我只会错过一些东西。 提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Phil、
    您指的是哪个.S 文件? 如果您看到 startup_rvmdk.K、则这是用于 Keil uVision 工具链的启动文件。

    我自己不是 GCC 的专家。 我通常只使用 CCS。 但是、我在下面找到了有关如何使用 GCC 编译器和链接器的链接。
    gcc.gnu.org/.../Building_Cross_Toolchains_with_gcc

    我认为 GNU 的散点文件与 CCS 的链接器命令文件完全相同、其中它主要指示链接器如何将代码段分配到存储器的特定区域并合并目标文件段。

    您是否已经尝试过 TivaWare 引导加载程序示例? 我建议您首先尝试该示例(即基于 UART 的引导加载程序)并熟悉 TivaWare 引导加载程序。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为您是指 BL_STARTUP_CCS.s 而不是 STARTUP_rvmdk.S 文件、对吧?

    如果您查看 bl_link_ccs.cmd 文件、您将看到如下所示的内容、其中.intvecs 段与其余段进行分组、并将它们分配给闪存(从0x0开始)作为加载地址、将0x20000000作为运行地址。 将引导加载程序编程到闪存并启动后、例程之一是将引导加载程序代码复制到0x20000000并从 RAM 执行(从0x20000000开始)。

    部分



    .intvecs
    .text
    .const
    .data

    } load = FLASH、run = 0x20000000、load_start (init_load)、run_start (init_run)、size (init_size)


    现在、如果您转到 BL_STARTUP_CCS.s 文件、您将看到正在创建的.intvecs 段、并且所有后续代码行都是.intvecs 段的一部分、在该段中、它们将按照上述链接器命令文件分配分配分配给闪存。



    ;;文件的这一部分进入中断向量部分


    .sect ".intvecs"