1

我在 Virtex4 FPGA 中使用 Xilinx Microblaze CPU 内核。我想在我当前的代码中添加一个新的代码部分,但是我的代码将超过它被烧到的闪存的大小。因此,我想将添加的代码刻录到另一个闪存。

我的代码由引导加载程序复制到 RAM,然后跳转到 RAM 并开始定期执行。我打算以相同的方式从第二个闪存复制新代码,与从已使用的闪存复制的代码相邻(在 RAM 中)。

为此,我实际上需要两个单独的 elf 可执行文件,一个用于每个烧录的闪存,并在它们之间进行精确分离,定义每个文件中驻留的例程。应该启用跨文件的例行调用。

我的问题:如何生成这些单独的 elf 文件,每个文件中都有精确的例程规范?有没有办法将一个可执行文件拆分为两个单独的文件?或者是否有另一种解决方案可以生成单独的可执行文件/库文件作为嵌入式系统中单个链接的输出?

谢谢,伊沙

4

3 回答 3

2
  1. 假设您已经完成了显而易见的操作并运行“strip”以生成没有调试符号的二进制副本。调试信息对实际目标没有用。

  2. 如果您剥离的二进制文件仍然比您的闪存大,您可以使用S-RECORD 工具来拆分该二进制文件。除了分割文件之外,它还有更多的选项,比如添加校验和、CRC,以及支持很多文件格式。

如果您的 RAM 大到足以容纳所有程序,则没有特别需要制作单独的 ELF 文件/DLL。只需将您的程序构建为一个在 RAM 地址空间中运行的大型单体程序,然后让您的引导加载程序将部分程序从 Flash 加载到 RAM。

于 2010-08-05T00:26:19.120 回答
2

如果您可以在 RAM 中重新组合二进制文件,那么链接到单个二进制文件然后拆分生成的文件应该是非常好的。您必须保证引导加载程序函数包含在主半部分中。最简单的方法是创建一个独立的引导加载程序二进制文件。

您可以使用splitdd之类的实用程序在将二进制文件复制到闪存之前对其进行分割。

于 2010-08-03T20:54:44.557 回答
0

如果可以使用动态库,则可以将可执行文件中的一些代码分解为一个,然后将一个文件简单地放置在每个闪存区域中。

于 2010-08-03T18:17:44.873 回答