写的是Zynq 7000系列的,arm有两个核。主要有AMP和SMP两种方式,SMP是两个核运行一个操作系统,跑LINUX的话,使能SMP,资源会自动分配给两个核运行。AMP是两个核独立运行,每个核可以运行操作系统也可以裸机运行。
两个CPU的启动方式是CPU0先运行,然后根据需要启动CPU1。
ZYNQ会先运行一个fsbl程序,再运行应用程序。因此启动CPU1的工作可以在fsbl中做,也可以在应用程序中做。
FSBL程序可以在VITIS这个软件中生成。
在FSBL中添加以下程序来启动CPU1
Xil_Out32(0XFFFFFFF0, CPU1程序地址);
dmb();
sev(); //唤醒 CPU1
此段程序加在FSBL程序的HandoffAddress = LoadBootImage()之后,LoadBootImage()的作用的是将程序拷贝到ddr中,先将程序拷贝到ddr中,程序才能跳转运行。
1.1 CPU0运行裸机程序
fsbl启动两个CPU的应用程序
1.2 CPU0运行操作系统(Linux)
uboot就是CPU0的应用程序
2 应用程序启动CPU1
2.1 CPU0运行裸机程序
在CPU0的应用程序中唤醒CPU1,程序一样,如下:
Xil_Out32(0XFFFFFFF0, CPU1程序地址);
dmb();
sev(); //唤醒 CPU1
2.2 CPU0运行操作系统(Linux)
可以在UBOOT中唤醒CPU1,也可以在运行内核后唤醒CPU1。
全部0条评论
快来发表一下你的评论吧 !