13.4 EDK - 如何直接从Flash执行代码

描述

本文介绍了直接从闪存中执行代码的更新流程。

  1. 在XPS中创建硬件规范;如果使用并行闪存,请确保包含EMC;如果使用串行闪存,请确保包含(q)spi控制器。
  2. 如果你想从flash调试:
    1. 右键单击System Assembly Viewer中的MicroBlaze - > 配置IP
    2. 单击“ 高级”按钮。
    3. 单击“ 调试”选项卡,然后启用至少一个硬件断点。
    4. 单击确定
  3. 使用比特流将您的设计导出到SDK。
  4. 在SDK中,创建您的软件应用程序。
  5. 右键单击您的软件应用程序,然后单击Generate Linker Script。
  6. 将以下部分(在“高级”选项卡下)移动到Flash:
    • 。文本
    • .RODATA
    • .SDATA2
    • .SBSS2
  7. 所有其他部分应链接到Block RAM。
  8. 单击“ 生成”
  9. 单击Xilinx工具 - > 启动Shell
  10. 导航到工作区内的应用程序的Debug文件夹。
  11. 运行以下命令:
    • $ 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。
    • 您的应用程序应该没有闪存,强制性非易失性部件除外。

    • 您还可以通过XMD(“connect mb mdm”和“dow volatile.elf”)进行连接以调试闪存。需要的一些额外步骤是:

      1. 打开调试配置( 运行 - > 调试配置 )。
      2. Main选项卡下,确保“C / C ++应用程序”是您的“volatile.elf”。
      3. 器件初始化选项卡下,需要选择“不要将程序下载到内存”(通过XMD下载)。
      4. 在“ 远程调试”选项卡下,当您“连接mb mdm”时,需要在XMD中看到的任何端口连接到“localhost”。默认值为1234。
      5. 您现在可以调试,设置在XPS中配置的断点数。


      如果要引导加载此应用程序:

      1. 你需要使用“。” (位置计数器)链接器脚本的操作数,用于偏移编程“flash.bin”的地址,如上所述。这超出了本回答记录的范围。有关更多信息,请参阅: Red Hat GNU Linker帮助
      2. 然后,您将flash.bin编程到不同的位置,并使用您的download.bit(包含您的volatile.elf),如(Xilinx答复46518)中所述
      的flash.bin
    编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

    提问于 2018-07-31 15:11:23 +0800

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

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