将ELF可执行文件拆分为嵌入式系统中的两个文件

时间:2010-08-03 08:50:38

标签: embedded linker fpga

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

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

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

我的问题:我如何制作这些单独的精灵文件,并在每个文件中准确说明例程?有没有办法将一个可执行文件拆分成两个单独的文件?或者是否存在另一种解决方案,用于生成单独的可执行文件/库文件作为嵌入式系统中单个链接的输出?

谢谢, Ishai

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

  1. 假设您已经完成了明显的并且运行'strip'来生成没有调试符号的二进制文件的副本。调试信息对实际目标没有用。

  2. 如果剥离的二进制文件仍然大于FLASH,则可以使用S-RECORD tools拆分该二进制文件。除了分割文件之外,它还有更多选项,例如添加校验和,CRC,以及支持大量文件格式。

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

答案 2 :(得分:0)

如果您可以使用动态库,则可能会将可执行文件中的某些代码分解为一个,只需将一个文件放在每个闪存区域中。