您好!
我通过 CCS 11.2使用 TIARMCLANG v1.3.1。 我想在项目/应用程序中通过链接器脚本插入 blobs 或二进制文件。
GCC 提供了这样的选项- 在 Eclipse 上的 GNU 连接器文件| MCU 中包含.bin 二进制文件
我想以类似的方式使用此功能。 有什么方法吗?
GNU 方法显然不适用于 TIARMCLANG。
谢谢、此致、
Aakash
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 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];
谢谢、此致、
乔治