zynq-7000系列基于zynq-zed的AMP模式的实现(linux+bare-metal)

zynq-7000系列基于zynq-zed的AMP模式的实现(linux+bare-metal)

                             

     作者:卢浩  

                                   时间:2017.3.4

                                    转载请注明出处

       这个实验要实现的是在zynq-zed上,cpu0运行linux系统,cpu1运行baremetal。原理上其实就是两个CPU共享DDR,比如zed上DDR有512M,我把384M分给CPU0-linux来使用,剩余的128M分给CPU1-BAREMETAL来使用。

       首先建立vivado工程,工程文件就使用基于zedboard的example工程。编译生成bit文件,导出bit,然后launch sdk。这一步也就是说,AMP模式完全是软件上的实现,主要在SDK上做一些修改配置,与vivado工程并没有直接的联系。

      下图是vivado工程:

       

     打开sdk后,首先设置一下环境变量

     

  •     选择 Xilinx_Tools->Repositories.具体设置如下图,用户可以根据自己的实际路径来设置,
  •     
  • 然后点击ok。
  •        接下来 File->New->Application_Project
  •        新建一个amp_fsbl,
  •        如下图:
  •        
  • 点击next,选择zynq_fsbl,然后点击finish。
  •       选择modify this bsp setting。确认the OS Version is 5.19
  •        如下图:
  •        
        接下来给CPU1创建一个BSP,
  •         选择 File->New->Board_Support_Package
  •         输入工程名称 app_cpu1_bsp,更改CPU选择ps7_cortexa9_1.
  •         点击Finish
  •         在Board Support Package Settings  选择Overview->drivers->ps7_cortexa9_1 
  •         然后改变 extra_compiler_flags值为 -g -DUSE_AMP=1
  •         点击OK。
  •          如下图:
  •          

  • 打开app_cpu1_bsp/ps7_cortexa9_1/libsrc/standalone_v5_19/src/xil-crt0.s 删除以下行: 
    bl XTime_SetTime

保存。
接下来创建一个在CPU1上跑的例程
  • 选择File->New->Application_Project
  • 输入工程名称 app_cpu1
  • 选择cpu1  ps7_cortexa9_1
  • 选择Board Support Package 使用 Use existing app_cpu1_bsp 
  • 然后点击 Next
  • 选择一个空的程序 Empty Application 
  • 然后点击finish。
  • 如下图:

  • app_cpu1导入  C 和 linkerscript 文件  . 右击 app_cpu1/src然后选择Import,选择General->File_System 
  • 然后选择 From directory, 选择 <your path>/src/cpu1_app/src,全选app_cpu1.c 和 lscript.ld 然后finish. 
  • 点击Yes 来覆盖 lscript.ld。
  • 如下图:

  • 点击finish。
  • 接下来就是制作BOOT.BIN文件了。
  • BOOT.BIN包含如下文件


  • amp_fsbl.elf,base_zynq_design_wrapper.bit,u-boot.elf,app_cpu1.elf。
  • 其中记得修改uboot的DDR大小设置,
    • 打开uboot源代码目录 u-boot/include/configs/zynq_zed.h,编辑CONFIG_SYS_SDRAM_SIZE大小为
      (384 * 1024 * 1024),原本是(512*1024*1024)
    • 修改内核dts文件关于DDR的设置和maxcpu的设置
    • 在devicetree文件里,增加如下配置到环境变量 bootargs, mem=384M maxcpus=1。改变reg = <0x0 0x20000000>
    reg = <0x0 0x18000000>。

编译uboot,kernel,然后把所有制作完成的文件放进SD卡,启动linux。此时CPU0运行linux,CPU1运行baremetal。

       附件下载链接

       http://download.csdn.net/detail/luhao806/9770064

       在linux下运行

       ./devmem 0xfffffff0 w 0x18000000

   LED0会不断闪烁。



  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值