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.

[参考译文] 如何使用 TIARMCLANG v1.3.1通过链接器插入 blob?

Guru**** 2522770 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1127098/how-to-insert-a-blob-via-linker-with-tiarmclang-v1-3-1

您好!

我通过 CCS 11.2使用 TIARMCLANG v1.3.1。 我想在项目/应用程序中通过链接器脚本插入 blobs 或二进制文件。
GCC 提供了这样的选项- 在 Eclipse 上的 GNU 连接器文件| MCU 中包含.bin 二进制文件

我想以类似的方式使用此功能。 有什么方法吗?

GNU 方法显然不适用于 TIARMCLANG。

谢谢、此致、
Aakash

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

    tiarmclang 使用 TI 专有 Arm 编译器中的链接器。  它没有用于合并原始二进制文件的内置功能。   

    我开发了一种方法来实现它。  请理解、此方法未经过充分测试。  它可能需要更小的更改。  话虽如此、我相信这是值得考虑的。

    通常的想法是将二进制 blob 放入普通目标文件中、然后像任何其他目标文件一样将该文件链接到系统中。

    创建名为 empty.s 的空汇编源文件  构建它就像在系统中执行任何其他源文件一样...

    tiarmclang -c 其他选项 empty.s

    目标文件 empty.o 具有与系统中其他目标文件相同的所有属性。

    使用实用程序 tiarmobjcopy 创建一个名为 blob_file.o 的新目标文件、该文件具有与 empty.o 相同的所有属性  但它中还有另一个包含二进制 blob 的段。 假设二进制 blob 位于名为 blob_origin.bin 的文件中。  以下是命令...

    tiarmobjcopy --add-section blob_section=blob_origin.bin --set-section-flags blob_section=alloc,readonly --add-symbol blob_symbol=blob_section:0,section empty.o blob_file.o

    选项--add-section 会在内容来自 blob_origin.bin 的位置创建一个新段。  选项--set-section flags 使该段成为目标可执行文件的一部分、并且为只读(我假设它位于闪存中)。  --add-symbol 选项会创建一个名为 blob_symbol 的符号,该符号与二进制 blob 的基址相对应。  有关这些选项的更多信息、请参阅 tiarmclang 在线手册的 tiarmobjcopy 页面。  

    将目标文件 blob_file.o 与任何其他目标文件一样链接到系统中。  链接器命令文件创建并分配二进制 blob,其 SECTIONS 指令中的行类似于...

    blob_section > FLASH

    这将创建一个名为 blob_section 的输出段。  它由所有也称为 blob_section 的输入段组成。  在本例中、只有一个这样的输入段。  它被分配给闪存存储器范围。

    使用二进制 blob 的 C 代码必须使用符号引用它、否则链接器会忽略它。  这样的东西会做的……

    extern uint8_t blob_symbol[];
    /* ... */
       variable = blob_symbol[i];

    谢谢、此致、

    乔治