TI中文支持网
TI专业的中文技术问题搜集分享网站

AM6442: ipc_rpmsg_echo_linux: 在Linux系统下的R5F、M4F之间无法使用RPMsg进行数据传递

Part Number:AM6442Other Parts Discussed in Thread:TMDS64EVM

评估板: TMDS64EVM

MCU+SDK: V08.05

Linux SDK: V08.05

TI的技术支持你好:

需求:我这边有个项目规划了要使用A53核运行Linux系统并且需要与R5FSS0-1进行数据传递。每个R5F核之间也需要进行数据传递,比如R5F0_0与R5F0_1进行数据传递、R5F0_0与R5F1_0进行数据传递。通过阅读MCU+SDK文档里的ipc_rpmsg_linux_echo例子部分相关内容,了解到该例程的功能可以实现Linux系统下A53核与其他R5F核、M4F核的数据传递,R5F0-0与其他R5F核、M4F核进行数据传递。

问题:

当实际测试ipc_rpmsg_linux_echo示例时,发现R5F0-0和其他R5F内核和M4F内核不能使用RPMsg进行数据传输。运行linux系统的A53核和其他R5F和M4F核可以正常使用RPMsg进行数据传输。

R5FSS0-0 <–> R5FSS0-1    (X)

R5FSS0-0 <–> R5FSS1-0    (X)

R5FSS0-0 <–> R5FSS1-1    (X)

R5FSS0-0 <–> M4F             (X)

A53 <–> R5F   (√)

A53 <–> M4F   (√)

我现在遇到的问题其实之前在E2E上就有人问过,但似乎还没有讨论出这个问题的最终解决方法。

(1) AM6442: AM6442: ipc_rpmsg_echo_linux: rpmsg exchange between RTOS/NORTOS CPUs failed – Processors forum – Processors – TI E2E support forums

 

huang gong:

为了分析问题出在哪和让问题尽快地被解决。我在我这边对IPC_rpmsg_linux_echo例子进行一些简单的修改。并对修改的程序做了一些测试。

修改的内容及测试结果如下所示。

首先在一些关键节点调用DebugP_log,DebugP_log的内容通过在example.syscfg上配置Debug Log –>Enable Uart Log进行打印输出。

1)[R5FSS0-0] 我在ipc_rpmsg_echo.c文件的第205行下调用DebugP_log来输出相关日志(ipc_rpmsg_linux_echo–>ipc_rpmsg_echo_linux_am64x-evm_r5fss0-0_freertos_ti-arm-clang)。由于例子里的RPMessage_send()和RPMessage_recv()函数都是选择SystemP_WAIT_FOREVER来作为调用参数。根据对RPMsg API部分的描述,RPMessage_send()和RPMessage_recv()都是以阻塞的方式调用。通过添加DebugP_log想着看在R5FSS0-0程序的一些关键节点有没有被执行到。配置example.syscfg文件的R5FSS0-0,在Debug Log 下选择使能Uart1(E15、E14)进行日志打印输出。

2)[R5FSS0-1] 我在ipc_rpmsg_echo.c文件的第141行下调用DebugP_log来输出相关日志(ipc_rpmsg_linux_echo–>ipc_rpmsg_echo_linux_am64x-evm_r5fss0-1_freertos_ti-arm-clang)。我想看看R5FSS0-1是否接收到R5FSS0_0通过RPMsg发送的数据。我还修改了示例的配置。配置example.syscfg文件的R5FSS0-1,在Debug Log 下选择使能另一个Uart来打印log信息。

3)linker.cmd文件和example.syscfg的MPU部分保持原样

4)在TMDS64EVM上运行的Linux系统为TI的Linux SDK。直接在TI官网上下载.wic文件,使用SD卡去启动Linux系统并运行。

保存上面的修改的工程保存并编译。将生成xxx.out文件复制到linux系统里,在Linux系统里面重新配置R5F,M4F的可执行文件(3.6. IPC for AM64x — Processor SDK AM64X Documentation)。在Linux的Debug窗口输入reboot重新启动Linux系统。可以看到程序执行的输出结果如截图所示:

1. R5F0-0核程序执行输出结果: 

从上面的输出中我们可以看到,RPMessage_recv()函数好像没有成功执。并且阻塞在那了。

2. R5F0-1核程序执行输出结果: 

从上面的截图内容可以知道。R5F0-1没有收到R5F0-0核通过RPMsg传过来的数据。因为不满足if上的判断,if内部的内容没有被执行。

3. Linux端rpmsg_char_simple、rpmsg_client_sample的测试和Linux SDK文档的说明一致。

通过上面的测试是否可以判断在R5FSS0-0上已经将数据通过RPMsg的方式发送到某一片“共享内存区域”?。但是并没有通知其他R5F核、M4F核使用RPMessage_recv()将数据读出来?从而导致程序的执行阻塞在RPMessage_recv()部分?

,

huang gong:

根据上面的分析。我继续对ipc_rpmsg_linux_echo的工程做修改。基于上面所做的修改,我对该ipc_rpmsg_linux_echo例子里所有工程的linker.cmd和example.syscfg文件做修改。

被修改的工程:

ipc_rpmsg_echo_linux_am64x-evm_m4fss0-0_freertos_ti-arm-clang

ipc_rpmsg_echo_linux_am64x-evm_r5fss0-0_freertos_ti-arm-clang

ipc_rpmsg_echo_linux_am64x-evm_r5fss0-1_freertos_ti-arm-clang

ipc_rpmsg_echo_linux_am64x-evm_r5fss1-0_freertos_ti-arm-clang

ipc_rpmsg_echo_linux_am64x-evm_r5fss1-1_freertos_ti-arm-clang

修改的内容参考ipc_rpmsg_echo例子的linker.cmd和example.syscfg文件。

对于linker.cmd,修改了USER_SHM_MEM、LOG_SHM_MEM、RTOS_NORTOS_IPC_SHM_MEM所对应的地址数据。

对于example.syscfg,对该文件内的所有R5F核工程的MPU-ARMv7–>CONFIG_MPU_REGION4–>Region Start Address由0xA5000000改成0x701D0000。

example.syscfg

linker.cmd

修改ipc_rpmsg_echo.c文件第99行,将gMsgEchoCount从100000改为10。

保存上面的修改的工程保存并编译。将生成xxx.out文件复制到linux系统里,在Linux系统里面重新配置R5F,M4F的可执行文件(3.6. IPC for AM64x — Processor SDK AM64X Documentation)。在Linux的Debug窗口输入reboot重新启动Linux系统。可以看到程序执行的输出结果如截图所示:

1. R5F0-0核程序执行输出结果: 

2.R5F0-1核程序执行输出结果: 

通过上面R5FSS0-0和R5FSS0-1的输出结果的两张截图可以看到。

经过这次测试的结果,是否可以认为R5FSS0-1可以使用RPMsg接收到来自R5FSS0-0的数据。并且将数据回传给R5FSS0-0。R5FSS0-0端也能接收到其他R5F核与M4F核所传递回来的数据?

由于程序经过修改,此时Linux系统无法完全启动。

Linux系统启动到打印Reached target System Initialization日志后,就循环打印下面三句话

omap_i2c 20010000.i2c:controller time out

omap_i2c 20010000.i2c:controller time out

ssd1307fd 1-003c: Couldn’t send I2C command

通过修改linker.cmd和example.syscfg文件。R5FSS0-0似乎能够通过RPMsg与其他R5F和M4F内核通信,但Linux系统无法正常启动。

因为我不熟悉Linux的操作系统。因此除了上面的操作和rpmsg_char_simple相关联.so库被重新连接。没有对TI的Linux SDK做过其他更改。

希望我的测试可以为TI的工程师定位问题提供一点帮助

希望TI可以提供指导!

如何让ipc_rpmsg_linux_echo例子可以完全实现文档里面所描述的功能?(AM64x MCU+ SDK: IPC RP Message Linux Echo (ti.com))

,

Cherry Zhou:

您好,

不知道您这边是否可以直接在英文论坛发帖询问?因为您的问题较复杂,这样可以避免转述时可能会出现的问题。

,

huang gong:

您好,

我这边在刚刚也在e2e.ti.com上发了一篇英文的帖子,e2e.ti.com/…/am6442-ipc_rpmsg_echo_linux-rpmsg-cannot-be-used-for-data-transfer-between-r5f-and-m4f-cores-in-linux

,

Cherry Zhou:

您好,

好的谢谢,英文论坛的工程师应该会在24-48h小时内给到您答复(今天仍然是国外的假期),如果周三前没有给到您答复我们来帮您催促下。

,

Cherry Zhou:

您好,

我们会先把中文论坛的这个帖子关闭,如果您需要任何帮助可以随时reopen该贴,谢谢!

赞(1)
未经允许不得转载:TI中文支持网 » AM6442: ipc_rpmsg_echo_linux: 在Linux系统下的R5F、M4F之间无法使用RPMsg进行数据传递
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1