本人使用的sdk版本为2015.4本人的方法适用于15.4之后的版本
Zynq开发双核分为两种方法,第一种双核裸跑,第二种linux+裸跑。
双核裸跑:
先使用Debug调试器调试,通过SDK新建一个工程正常建造工程不需要更改任何地方,
当工程建造好后,双击打开lscript.ld 文件。
配置ps7_ddr_0_S_AXI_BASEADDR的起始地址和长度,之后再建造一个工程
记得选择cpu1核,建造工程后打开lscript.ld配置cpu1核的内存起始地址以及长度。配置后双击system.mss选择打开,将drivers下的ps7_cortexa9_1中-g后添加-DUSE_AMP=1。
之后打开bsp下的ps7_cortexa9_1下的libsrc,找到standalone_v5_3打开其中src中的boot.S
之后进行编程,编成后编译。
编译后选择SDK右上角的Debug打开debug configurations,
选择application,设置cpu0的程序和cpu1的程序。设置好后点击Debug
如果调试正常后就可制作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