您的位置:首页 > 运维架构 > Linux

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

2017-03-04 10:27 2191 查看
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会不断闪烁。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐