ZYNQ 双核运行并交互,一个linux,一个裸核 | 您所在的位置:网站首页 › cpu怎么设置双核还是单核 › ZYNQ 双核运行并交互,一个linux,一个裸核 |
ZYNQ 双核运行并交互,一个linux,一个裸核
前言需要掌握的知识硬件平台的建立裸机流水灯工程的准备和验证petalinux 2018.2 工程的建立打包程序包括流水灯程序2:设置linux 为 单核
petalinux 核和裸机流水灯核的交互
前言
zynq 7000 一般有2个cpu (arm A9),我们一般都用一个cpu0,本实验让2个cpu 都运行起来,cpu0 运行操作系统petalinux 2018.2, cpu1: 裸机流水灯。同时通过共享内存的方式,实现2个核之间的交互。 关于zynq 双核运行的官方文档有如下3篇: xapp1078-amp-linux-bare-metal.pdf xapp1079-amp-bare-metal-cortex-a9.pdf ug1186-zynq-openamp-gsg.pdf 我们这个实验对应xapp1078, 但文档对应petalinux2014 的版本,有点太老了,而我的实验是在petalinux2018.2 上完成的。 需要掌握的知识1:会做petalinux 2018.2 或其他版本的启动制作。 2:熟悉 zynq 7000 AMP模式 双裸核CPU同时运行,因为这个比较简单,可以作为本实验的热身。 硬件平台的建立硬件工程的建立是在Vivado2018.2 上完成的。其实要求很简单,符合linux下流水灯实验的要求即可,当然还需要挂接上SD卡。 裸机流水灯工程的准备和验证这个流水灯工程是建立运行在cpu1上的,存放地址在0x1e00_0000,工程的建立请看:zynq 7000 AMP模式 双裸核CPU同时运行。链接里的工程建立的存放地址是0x1000_0000,但我们这里cpu0 要运行petalinux2018.2 ,所以设置得比较高。 程序的代码做了适当修改如下: cpu1的led.c #include #include "platform.h" #include "xil_printf.h" #include "xparameters.h" #include "xil_io.h" #include "sleep.h" #define MY_IP 0x41200000 #include "xil_mmu.h" #define COM_VAL (*(volatile unsigned int*)(0xffff0000)) #define COM_VAL1 (*(volatile unsigned int*)(0xffff0004)) #define COM_VAL2 (*(volatile unsigned int*)(0xffff0008)) int main() { u32 Ledwidth; u32 count; Xil_SetTlbAttributes(0xffff0000,0x14de2); COM_VAL=0; COM_VAL1=0; count=0; while (1) { for (Ledwidth = 0x0; Ledwidth < 4; Ledwidth++) { Xil_Out32(MY_IP,1在出现的子界面里选择 Kernel Bootargs -----> 取消那个generate boot args automatically,转到下行回车,或者直接出现输入界面 在这个界面里添加 maxcpus=1, 如下图 这样操作保存后后,再petalinux-build ,按上面打包方法打包,在petalinux 2018.2 启动后, 流水灯在继续运行。 这说明cpu0 核运行petalinux2018.2 ,cpu1 运行裸机流水灯成功了。 petalinux 核和裸机流水灯核的交互在上面的流水灯代码里, COM_VAL1=1 |
CopyRight 2018-2019 实验室设备网 版权所有 |