ZYNQ openAMP实现linux+裸机同时运行

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应用程序,生成可以使用的程序。

欠缺太多后续补充:

猜你喜欢

转载自blog.csdn.net/wangjie36/article/details/118347132