ZYNQ7020AMP使用方法总结

本人使用的sdk版本为2015.4本人的方法适用于15.4之后的版本

Zynq开发双核分为两种方法,第一种双核裸跑,第二种linux+裸跑。

双核裸跑:

先使用Debug调试器调试,通过SDK新建一个工程正常建造工程不需要更改任何地方,

当工程建造好后,双击打开lscript.ld 文件。

ZYNQ7020AMP使用方法总结_第1张图片

配置ps7_ddr_0_S_AXI_BASEADDR的起始地址和长度,之后再建造一个工程

ZYNQ7020AMP使用方法总结_第2张图片

记得选择cpu1核,建造工程后打开lscript.ld配置cpu1核的内存起始地址以及长度。配置后双击system.mss选择打开,将drivers下的ps7_cortexa9_1中-g后添加-DUSE_AMP=1。

ZYNQ7020AMP使用方法总结_第3张图片

之后打开bsp下的ps7_cortexa9_1下的libsrc,找到standalone_v5_3打开其中src中的boot.S

找到ZYNQ7020AMP使用方法总结_第4张图片将其中的内容注释掉。

之后进行编程,编成后编译。

编译后选择SDK右上角的Debug打开debug configurations,

ZYNQ7020AMP使用方法总结_第5张图片

选择application,设置cpu0的程序和cpu1的程序。设置好后点击Debug

ZYNQ7020AMP使用方法总结_第6张图片

如果调试正常后就可制作boot.bin

建造正常的fsbl,不需要任何更改。在cpu0的程序中添加

#defineCPU1_START_UP_REG 0xFFFFFFF0

#define CPU1STARTADR 0x20000000

 

Xil_SetTlbAttributes(0xFFFF0000,0x14de2);           // S=b1 TEX=b100 AP=b11,Domain=b1111, C=b0, B=b0

         Xil_Out32(CPU1_START_UP_REG,CPU1STARTADR); //CPU1STARTADR=0xFFFFFFF0, CPU1STARTADR=0x20000000);

         dmb();//waits until write has finished

         print("CPU0:sending the SEV to wake up CPU1\n\r");

         __asm__("sev");

         dmb();

这样就可以从cpu0 启动cpu1.

Linux+裸跑

使用linux需要根据官方给的xapp1078文件进行设置双核程序

第一步:建造正常的fsbl程序,同时建造cpu1程序,建造cpu1程序和上方的裸跑方法一样。

第二步:打开uboot源代码目录 u-boot/include/configs/zynq_zed.h,编辑CONFIG_SYS_SDRAM_SIZE大小为(384 * 1024 * 1024),原本是(512*1024*1024)

第三步在devicetree文件里,增加如下配置到环境变量 bootargs, mem=384M maxcpus=1改变reg = <0x0 0x20000000>为reg = <0x0 0x18000000>。

第四部编译xapp1078的应用程序。生成可以使用的程序即可。


下载源码地址

https://download.csdn.net/download/yuanzhan11/10317806

你可能感兴趣的:(zynq,linux)