UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

取消
显示结果 
搜索替代 
您的意思是: 
Visitor waming@zhen
Visitor
164 次查看
注册日期: ‎11-27-2018

ZynqMP Linux Master running on APU with RPMsg in userspace and 2 RPU slaves

   

    我在按照UG1186 和  wiki-OpenAMP+2018.2 所描述的步骤来实现:ZynqMP Linux Master running on APU with RPMsg in userspace and 2 RPU slaves 时遇到了一个问题。

    我使用的工具及版本如下:

    petalinux: 2018.2

    xsdk: 2018.2

    硬件平台:ZCU102.revirsion1.0

    我需要实现的应用场景如下:

    Master: APU 运行 Linux 系统,有两个应用程序 linux-testapp-to-r5-0 和 linux-testapp-to-r5-1,这两个应用程序都是echo_test程序;

    Slaver: RPU_0 运行 freeRTOS 系统,有一个echo_test应用程序,名称为 freeRTOS_echo_test_r5_0;

    Slaver: PRU_1 运行 freeRTOS 系统,有一个echo_test应用程序,名称为 freeRTOS_echo_test_r5_1

    以下是我按照 UG1186 和 Wiki 的描述对相关文档做的修改:

    1. 在[system-user.dtsi] 添加以下内容:

/ {
    reserved-memory {
        #address-cells = <2>;
        #size-cells = <2>;
        ranges;
        /* Reserved memory for both firmware and shared memory */
        rproc_0_reserved: rproc@3ed000000 {
            no-map;
            reg = <0x0 0x3ed00000 0x0 0x8000000>;
        };
    };
  
    amba {
        vring: vring@0 {
            compatible = "vring_uio";
            reg = <0x0 0x3ed40000 0x0 0x40000>;
        };
        shm0: shm@0 {
            compatible = "shm_uio";
            reg = <0x0 0x3ed80000 0x0 0x80000>;
        };
  
        vring1: vring@1 {
            compatible = "vring_uio";
            reg = <0x0 0x3ef00000 0x0 0x40000>;
        };
        shm1: shm@1 {
            compatible = "shm_uio";
            reg = <0x0 0x3ef40000 0x0 0x80000>;
        };
  
        ipi0: ipi@0 {
            compatible = "ipi_uio";
            reg = <0x0 0xff340000 0x0 0x1000>;
            interrupt-parent = <&&gic>;
            interrupts = <0 29 4>;
        };
    };
};

注意:interrupt-parent = <&&gic>; 是错误的,正确的写法是 interrupt-parent = <&gic>; 否则编译会出错。

2. linux-testapp-to-r5-1 相关文档的修改如下:

[platform_info.c]

 

#define IPI_CHN_BITMASK    0x00000200

#define IPI_DEV_NAME "ff340000.ipi"
#define VRING_DEV_NAME "3ef00000.vring"
#define SHM_DEV_NAME "3ef400000.shm"

[rsc_table.c]

 

 

#define RING_TX    0x3EF00000
#define RING_RX    0x3EF04000

3. freeRTOS_echo_test_r5_1 相关文档的修改如下:

 

[rsc_table.c]:

#define RING_TX    0x3EF00000
#define RING_RX    0x3EF04000

{RSC_RPROC_MEM, 0x3ef00000, 0x3ef00000, 0x100000, 0},
/*Virtiio device entry*/ { RSC_VDEV, VIRTIO_ID_RPMSG_, 0 RPMSG_IPU_CO_FEATURES, 0, 0, VIRTIO_CONFIG_STATUS_DRIVER_OK, NUM_VRINGS, {0, 0}, },

 

[lscript.ld]:

 

psu_ddr_S_AXI_BASEADDR : ORIGIN = 0x3ed40000, LENGTH = 0x00040000

 

 

生成BOOT.bin, BIF如下:

 

the_ROM_image:
{
         [fsbl_config] a53_x64
         [bootloader] <plnx project>/images/linux/zynqmp_fsbl.elf
         [destination_device=pl] <plnx project/images/linux/download.bit
         [destination_cpu=pmu] <plnx project>/images/linux/pmufw.elf
         [destination_cpu=r5-0] /path/to/freeRTOS_echo_test_r5_0 .elf
         [destination_cpu=r5-1] /path/to/freeRTOS_echo_test_r5_1 .elf
         [destination_cpu=a53-0, exception_level=el-3, trustzone] <plnx project>/images/linux/bl31.elf
         [destination_cpu=a53-0, exception_level=el-2] <plnx project>/images/linux/u-boot.elf
}

 

将BOOT.bin、image.ub 和 system.dtb 放入SD卡,从SD卡启动,这时出现了问题。

加载RPU_0的应用程序 freeRTOS_echo_test_r5_0.elf,有以下输出内容:

 

Starting application...
Try to init remoteproc resource
Init remoteproc resource succeeded
Waiting for events...

 

说明 RPU_0 应用程序加载没有问题,问题出现在加载 RPU_1 的应用程序 freeRTOS_echo_test_r5_1.elf 的时候,它只有以下输出:

Starting application...
Try to init remoteproc resource

RPU_1 的应用程序没有正常加载。

我不知道是哪里出了问题,是哪里没有修改好吗?我不知道,请问大家是否有遇到类似的问题,你们是怎样解决的,请帮帮我,谢谢!

 

不知道我是否将问题描述清楚,如果需要我提供更多的信息,请告诉我。

0 项奖励
1 条回复1
Xilinx Employee
Xilinx Employee
142 次查看
注册日期: ‎09-14-2018

回复: ZynqMP Linux Master running on APU with RPMsg in userspace and 2 RPU slaves

目前没做过这个。不过可以试下,

1.  r5_1已经跑起来了,可以加些打印语言看下死在什么代码段上了。

2. 如果不起r5-0, r5-1可以起得来吗?如果可以的话,可能什么地方冲突了

 

供参考~

0 项奖励