81i EDK-“错误:DATA2MEM:31”在“StulyBD。BMM”中RAM空间的越界代码段。

描述

关键字:ELF、比特、128、链接器、脚本、邻接、内存、BRAM

我试图通过连续使用两个BRAM内存控制器来扩展我的代码空间,所以我不必使用Link脚本,否则我可以在BRAM拥有更大的代码段。

当我尝试更新比特流时,DATA2MEM报告以下错误:

“DATA:DATA2MEM:在StulyB.B.BMM中RAM空间的31出界代码段。
内存空间的PLBRBRAMIFIFCNTLR11BRAM占用[0x000 000 000:0x000 01FFFF]
代码段α1占用[0x000 000 000:0x000 034 d73]

解决方案

决议1

DATA2MEM不支持从EDK生成的连续存储器。

为了解决这一问题,使用链接器脚本将应用程序代码段放置在单独的内存区域中。

XPS提供了一个名为“生成链接器脚本”的工具,以帮助创建将应用程序代码映射到两个存储器的链接器脚本。

若要在XPS中打开此工具,请选择工具-gt;生成链接器脚本。

注意:此工具可在EDK 6.3及以后使用。

决议2:

默认的EDK链接器脚本生成一个带有单个程序头的ELF文件。一个加载器程序(在这种情况下,DATA2MEM)读取这个标头,将ELF下载到内存中。因为内存区域是连续的,所以只需给链接器提供StasyAdDR选项是合乎逻辑的,链接器使用地址来生成ELF文件;然而,DATA2MEM无法区分相邻的存储器和错误结果。

解决方案是更改链接器脚本以生成每个物理内存的程序头。链接器脚本中的PHDRS构造可用于生成程序头。在这种情况下,链接器生成两个程序头,一个用于ELF文件中的每个物理内存。DATA2MEM可以将ELF文件正确地下载到适当的存储器中,因为它现在读取两个头,每个物理内存区域一个。

有关ELF程序头的更多信息,请参见:
http://www. Gun.org/bimuuls/手动/LD-2.91/HTMLIONMOO/LD。

决议3:

这个问题的另一种解决方案是手动修改BMM文件,并在独立模式下运行DATA2MEM。

注意:此解决方案只适用于连续的、相等大小的内存空间。

1。在XPS(工具-GT;更新比特流)或ISE中运行整个硬件流程,从而生成注释的BMM。
2。修改BMM文件,将所有总线块放在一个地址块中。调整一个地址,主地址块跨越整个地址区域。
三。保存BMM文件,并在独立模式下运行DATA2MEM,如下所示:

GT;DATA2MEM -BM SysBD.BMM -BD执行程序。
-BT系统.B-O-B下比特

…其中TopyLealTygAtname是顶部地址块实例名。

所生成的下载文件应该初始化整个比特流。
编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-30 16:10:12 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它