gpt4 book ai didi

arm - 如何为多个组合的二进制文件设置构建

转载 作者:行者123 更新时间:2023-12-01 03:56:30 25 4
gpt4 key购买 nike

在使用嵌入式系统时,有时需要一个处理器加载多个独立编译和链接的二进制文件;在我目前的项目中,处理器应该有自己的代码图像和应该传输到与之通信的远程设备的代码图像。如果我用十六进制或二进制文件对芯片进行编程,我可以使用批处理文件来简单地连接单独构建和链接文件的内容(也许使用“FIND/V”来删除诸如英特尔文件结束记录之类的东西)。然而,当使用 Keil 调试器对设备进行编程时,芯片不是从这样的文件加载,而是从 .AXF 文件加载。

如果在我测试主设备(连接了调试器)的代码时,应该发送到远程设备的代码图像会更改多次,那么设置构建过程的最有用方法可能是什么?我的倾向是编写一个实用程序,将远程处理器代码的二进制文件转换为包含 const unsigned char REMOTE_CPU_DATA[] = {...}'; 的 C 文件。并配置链接器以在适当的地址定位该文件的 const 部分,或者包含绝对数据指令的 ASM 文件,然后将该实用程序作为主代码构建过程的一部分运行,但将二进制数据转换为文本格式包含在项目中似乎令人讨厌。另外,最好是找到一个常用的工具来进行这种转换,还是用 C# 或 VB.NET 之类的东西编写一个特殊用途的工具(我可以使用任何一种语言,但主要将后者用于 PC 开发)?我希望 ASM 输出将是 Keil 特定的,而 C 输出将与开发系统无关,但是使用 C 而不是 ASM 需要在链接器规范中添加一行以设置远程 CPU 数据的绝对地址 [地址远程 CPU 数据的数量是固定的,以允许它在程序控制下加载,但加载它的硬件 channel 尚不存在]。

最佳答案

您可以使用 objcopy 从二进制文件创建一个 ELF 文件。像这样,

objcopy -I binary -B arm -O elf32-littlearm --rename-section \
.data=.remote.data remote.bin remote.elf

然后你可以像这样更新你的链接器脚本,
.remote { 
REMOTE_CPU_DATA = . ;
*(.remote.data);
}

把它放在你喜欢的地方。数据从'C' 访问 extern char REMOTE_CPU_DATA[];或者您希望输入数据。您可以使用 dd 按摩二进制文件的字节序。 , 等等。

另一种方法是使用 Gnu 汇编器的 .incbin 按照 Linux's firmware Makefile 的指令.

我不知道 Keil 工具是否可以处理 objdump 输出的 ELF 格式或 gas .我认为,如果 Keil 工具具有相似的语义,那么相似的想法可能适用。

编辑:这也可以通过使用一些 *nix 工具的 shell 脚本来完成,
printf 'char REMOTE_CPU_DATA[] = {' && \
hexdump -v -e '16/1 "0x%x," "\n"' remote.bin && \
printf '};' > remote.c

关于arm - 如何为多个组合的二进制文件设置构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16943569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com