nfchg 发表于 2015-4-5 21:22:52

分享:ZYBO开发板AMP例子(双核独立运行)

AMP全称Asymmetric multiprocessing,说白了就是CPU0跑自己程序,CPU1也跑自己的程序。参考官方xapp1079-Simple AMP: Bare-Metal System Running on Both Cortex-A9 Processors.例子,实现了cpu0每隔5s打印CPU0: Hello World CPU 0,cpu1每隔5s打印CPU1: Hello World CPU 1。
开发板的启动,可以参考我的另一篇帖子 分享:用J-LINK把u-boot down到zybo开发板上 http://www.amobbs.com/thread-5619302-1-1.html (出处: amoBBS 阿莫电子论坛)
用SDK编译两个CPU的简单程序,程序和elf文件在附件里。
下面介绍下使用:
1、启动u-boot,然后如下图输入命令,因为本人网线比较差,有时候以太网连不上。

2、PC上需要有一个tftp服务器,我用的服务器在附件中。打开服务器。
3、然后通过tftpboot命令把amp_cpu1.elf下载到0x005000000位置(DDR3中),因为amp_cpu0的起始地址是0x00100000,amp_cpu1的起始地址是0x00200000,所以要必开这两个地址。
4、使用u-boot loadelf命令把amp_cpu1.elf文件装载到正确的位置,这个命令是本人自己修改的,就是把bootelf命令后面地址跳转的部分去掉,只把elf文件下载到对应的地址。
5、通过tftpboot命令把amp_cpu0下载到0x00500000位置,同step3。
6、启动amp_cpu0.elf文件,使用bootelf命令。

这样实现以下效果:


在这个例子中,cpu0负责运行u-boot,然后运行amp_cpu0.elf,cpu1负责运行amp_cpu1.elf。

正常情况cpu0先启动,然后唤醒cpu1,这个过程在官方Technical Reference Manual中有如下介绍:
The steps for CPU 0 to start an application on CPU 1 are as follows:
1. Write the address of the application for CPU 1 to 0xFFFFFFF0.
2. Execute the SEV instruction to cause CPU 1 to wake up and jump to the application.
The address range 0xFFFFFE00 to 0xFFFFFFF0 is reserved and not available for use until the stage 1
or above application is fully functional. Any access to these regions prior to the successful start-up
of the second CPU causes unpredictable results.

cpu1的程序起始地址放在0xFFFFFFF0中,这样cpu0通过sev指令唤醒cpu1后,就会跳转到cpu1程序的起始地址。

041012js 发表于 2015-4-5 22:42:02

从哪分享的?

041012js 发表于 2015-4-5 23:18:48

有xapp1078在zybo板子上的例子没?

nfchg 发表于 2015-4-6 09:54:12

041012js 发表于 2015-4-5 23:18
有xapp1078在zybo板子上的例子没?

目前没有,不过这个应该可以实现。

nfchg 发表于 2015-4-6 09:54:44

041012js 发表于 2015-4-5 22:42
从哪分享的?

本人自己弄的,参考xapp1079

041012js 发表于 2015-4-6 10:06:48

nfchg 发表于 2015-4-6 09:54
目前没有,不过这个应该可以实现。

期待xapp1078大作

moonstone 发表于 2016-11-29 11:20:43

牛。学习一下。多谢楼主。

chenqi 发表于 2018-2-9 10:19:51

不知道两个内核是否都能独立的操作外部外设呢,比如io

jameszxj 发表于 2018-7-17 09:37:34

chenqi 发表于 2018-2-9 10:19
不知道两个内核是否都能独立的操作外部外设呢,比如io

可以的,但是要做好分配,不要两个CPU操作同一外设,这样会产生冲突。
页: [1]
查看完整版本: 分享:ZYBO开发板AMP例子(双核独立运行)