13.4 EDK - 如何直接从Flash执行代码
描述
本文介绍了直接从闪存中执行代码的更新流程。解
- 在XPS中创建硬件规范;如果使用并行闪存,请确保包含EMC;如果使用串行闪存,请确保包含(q)spi控制器。
- 如果你想从flash调试:
- 右键单击System Assembly Viewer中的MicroBlaze - > 配置IP 。
- 单击“ 高级”按钮。
- 单击“ 调试”选项卡,然后启用至少一个硬件断点。
- 单击确定 。
- 使用比特流将您的设计导出到SDK。
- 在SDK中,创建您的软件应用程序。
- 右键单击您的软件应用程序,然后单击Generate Linker Script。
- 将以下部分(在“高级”选项卡下)移动到Flash:
- 。文本
- .RODATA
- .SDATA2
- .SBSS2
- 所有其他部分应链接到Block RAM。
- 单击“ 生成” 。
- 单击Xilinx工具 - > 启动Shell 。
- 导航到工作区内的应用程序的Debug文件夹。
- 运行以下命令:
- $ mb-objcopy \ --set-section-flags .text = alloc,readonly,code \
--set-section-flags .init = alloc,readonly,code \
--set-section-flags .fini = alloc,readonly,code \
--set-section-flags .rodata = alloc \
--set-section-flags .sdata2 = contents \
--set-section-flags .sbss2 = contents \ myApp.elf volatile.elf - $ mb-objcopy -O二进制\
-j .text \
-j .init \
-j .fini \
-j .rodata \
-j .sdata2 \
-j .sbss2 \
myApp.elf - 关闭shell。
- 单击Xilinx工具 - > 编程FPGA 。
- 下载bootloop。
- 单击Xilinx工具 - > 程序闪存 。
- 将flash.bin编程为偏移量0x0,工作内存为Block RAM。
- 单击Xilinx工具 - > 编程FPGA 。
- 选择你的volatile.elf。
- 您的应用程序应该没有闪存,强制性非易失性部件除外。
- 打开调试配置( 运行 - > 调试配置 )。
- 在Main选项卡下,确保“C / C ++应用程序”是您的“volatile.elf”。
- 在器件初始化选项卡下,需要选择“不要将程序下载到内存”(通过XMD下载)。
- 在“ 远程调试”选项卡下,当您“连接mb mdm”时,需要在XMD中看到的任何端口连接到“localhost”。默认值为1234。
- 您现在可以调试,设置在XPS中配置的断点数。
- 你需要使用“。” (位置计数器)链接器脚本的操作数,用于偏移编程“flash.bin”的地址,如上所述。这超出了本回答记录的范围。有关更多信息,请参阅: Red Hat GNU Linker帮助 。
- 然后,您将flash.bin编程到不同的位置,并使用您的download.bit(包含您的volatile.elf),如(Xilinx答复46518)中所述 。
您还可以通过XMD(“connect mb mdm”和“dow volatile.elf”)进行连接以调试闪存。需要的一些额外步骤是:
如果要引导加载此应用程序: - $ mb-objcopy \ --set-section-flags .text = alloc,readonly,code \
添加评论