AMP: 非对称多处理,每个 CPU 内核运行一个独立的操作系统或同一操作系统的独立实例。
SMP: 对称多处理,一个操作系统实例可以管理所有 CPU 内核,且应用并不绑定某一内核。
BMP: 混合多处理,一个操作系统实例可以同时管理所有 CPU 内核,但每个应用被锁定于某个指定的核心。
ZYNQ双核开发可以使用双核裸机运行,也可以实现linux+裸机运行。
环境:petalinux2018.3及其以上版本,vivado2018.3及其以上版本
一,新建裸机程序
1,新建CPU0 裸机程序:在 Processor 选择 ps7_cortexa9_0,也就是 CPU0,选择 Empty。添加cpu0_app.c 和 share.h,share.h, 内包含共享内存结构体。在 lscript.ld 里设置 CPU0 的访问空间,将 CPU0 空间设置为一半,当然也可以根据需要修改。
进入BSP的详细配置界面进行库的配置。
2,新建CPU1裸机程序:选择 ps7_cortexa9_1。添加cpu1_app.c 和 share.h。设置 CPU1 内存空间,注意不要与 CPU0 重合,最后保留了 256 字节的空间,用于共享内存。
、CPU1 的 BSP 设置界面,在 extra_compile_flags 内添加-DUSE_AMP=1,使其支持双核工作。
二,打开ubuntu中uboot源代码目录 u-boot/include/configs/zynq_zed.h,编辑CONFIG_SYS_SDRAM_SIZE大小为(384 * 1024 * 1024),原本是(512*1024*1024)
三,驱动和设备树配置:
1,驱动手动配置:petalinux-config -c kernel
[*] Enable loadable module support --->
Device Drivers --->
Generic Driver Options --->
<*> Userspace firmware loading support
Remoteproc drivers --->
<M> Support ZYNQ remoteproc
<M> Support Microblaze remoteproc #can be unselected
Rpmsg drivers --->
<M> An rpmsg server sample
Kernel Features--->
Memory split (...)--->
(x) 2G/2G user/kernel split
[*] High Memory Support--->
2,在devicetree文件里,增加如下配置到环境变量 bootargs, mem=384M maxcpus=1改变reg = <0x0 0x20000000>为reg = <0x0 0x18000000>。
设备树源码下载路径:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/28770535/OpenAMP+2018.3
#创建设备树文件
gedit ./subsystem/linux/configs/device-tree/openamp-overlay.dtsi
#加入以下文本信息:
/ {
amba {
remoteproc0: remoteproc@0 {
compatible = "xlnx,zynq_remoteproc";
reg = < 0x00000000 0x10000000 >;
firmware = "firmware";
vring0 = <15>;
vring1 = <14>;
};
};
};
#保存并关闭
#添加到openamp-overlay.dtsi的引用
gedit ./subsystem/linux/configs/device-tree/system-top.dtsi
#在最后面加入下面的文本
/include/ "openamp-overlay.dtsi"
#保存并关闭
四,根文件系统配置:petalinux-config -c rootfs
Apps --->
[*] echo_test --->
[*] mat_mul_demo --->
[*] proxy_app --->
Modules --->
[*] rpmsg_proxy_dev_driver --->
[*] rpmsg_user_dev_driver --->
1,必须配置项:
filesystem packages
->libs->[*]libmetal
->openamp->[*]open-amp
2,非必须配置项:可以自由选择配置,对应Linux端例程和RPU固件。
五,编译xlinx 官方xapp1078应用程序,生成可以使用的程序。
欠缺太多后续补充: