嵌入式工程师进阶,基于AM64x开发板的IPC多核开发案例分享
前 言
本文档主要说明AM64x基于IPC的多核开发方法。默认使用AM6442进行测试演示,AM6412测试步骤与之类似。
适用开发环境如下:
Windows开发环境:Windows 7 64bit、Windows 10 64bit
虚拟机:VMware15.5.5
Linux开发环境:Ubuntu 18.04.4 64bit
Linux Processor SDK:ti-processor-sdk-linux-rt-am64xx-evm-08.01.00.39
U-Boot:U-Boot-2021.01
CCS版本:CCS11.2.0
MCU+ SDK:mcu_plus_sdk_am64x_08_03_00_18
SysConfig:sysconfig-1.12.1_2446
GCC AARCH64 Compiler:gcc-arm-9.2-2019.12-mingw-w64-i686-aarch64-none-elf
本文测试板卡为创龙科技SOM-TL64x核心板,它是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F设计的多核工业级核心板,通过工业级B2B连接器引出5x TSN Ethernet、9x UART、2x CAN-FD、GPMC、PCIe/USB 3.1等接口。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。

用户使用核心板进行二次开发时,仅需专注上层运用,降低了开发难度和时间成本,可快速进行产品方案评估与技术预研。
AM64x是SOC多核处理器,一般情况下,Cortex-A53核心运行Linux系统,Cortex-R5F/Cortex-M4F核心运行Baremetal(裸机)或RTOS(FreeRTOS等)。
ARM基于Linux的remoteproc/rpmsg驱动程序,可以实现Linux内核与运行RTOS的从处理器上的IPC驱动程序通信,具体框图如下图所示。
图 1IPC多核开发案例位于“4-软件资料\Demo\RTOS-demos\”目录下,案例project目录存放工程源码,bin目录存放可执行程序文件。
表 1
|
案例 |
目录 |
说明 |
|
ipc_rpmsg_echo_linux |
bin |
可执行程序 |
|
project |
工程源码 |
ipc_rpmsg_echo_linux案例
案例说明
案例功能:基于RP Message的API实现Cortex-A53与Cortex-R5F核间通信,以及Cortex-A53与Cortex-M4F核间通信。
程序框图如下图所示。

图 2 程序框图
RTOS工程创建了两个RPMsg端点,其中一个端点与Linux内核交换消息,另外一个端点用于与Linux用户空间、裸机或RTOS交换消息。

图 3
案例测试
环境搭建
请将案例bin目录下的am64-main-r5f0_0-fw、am64-main-r5f0_1-fw、am64-main-r5f1_0-fw、am64-main-r5f1_1-fw、am64-mcu-m4f0_0-fw可执行程序拷贝至评估板文件系统任意目录下。

图 4
进入评估板文件系统,执行如下命令,删除原来的软链接。
Target# rm /lib/firmware/am64-main-r5f0_0-fw
Target# rm /lib/firmware/am64-main-r5f0_1-fw
Target# rm /lib/firmware/am64-main-r5f1_0-fw
Target# rm /lib/firmware/am64-main-r5f1_1-fw
Target# rm /lib/firmware/am64-mcu-m4f0_0-fw

图 5
执行如下命令,创建新的软链接。
Target# ln -sf /home/root/am64-main-r5f0_0-fw /lib/firmware/am64-main-r5f0_0-fw
Target# ln -sf /home/root/am64-main-r5f0_1-fw /lib/firmware/am64-main-r5f0_1-fw
Target# ln -sf /home/root/am64-main-r5f1_0-fw /lib/firmware/am64-main-r5f1_0-fw
Target# ln -sf /home/root/am64-main-r5f1_1-fw /lib/firmware/am64-main-r5f1_1-fw
Target# ln -sf /home/root/am64-mcu-m4f0_0-fw /lib/firmware/am64-mcu-m4f0_0-fw

图 6
请将评估板重启,在系统启动过程中,Cortex-R5F、Cortex-M4F核心将会引导启动。在评估板文件系统执行如下命令,查询Cortex-R5F、Cortex-M4F核心与remoteproc关系。
Target# head /sys/class/remoteproc/remoteproc*/name

图 7
Cortex-R5F、Cortex-M4F核心与remoteproc关系如下表所示。AM6412包含1个Cortex-R5F核心:r5fss0_0;AM6442包含4个Cortex-R5F核心分别为:r5fss0_0、r5fss0_1、r5fss1_0、r5fss1_1。
表 2
|
CPU核心 |
remoteproc |
|
m4fss0_0 |
remoteproc0 |
|
r5fss0_0 |
remoteproc1 |
|
r5fss0_1 |
remoteproc2 |
|
r5fss1_0 |
remoteproc3 |
|
r5fss1_0 |
remoteproc4 |
备注:核心与remoteproc对应关系,请以实际情况为准。
执行如下命令,可查看Cortex-M4F、Cortex-R5F核心程序运行日志。
Target# cat /sys/kernel/debug/remoteproc/remoteproc0/trace0
Target# cat /sys/kernel/debug/remoteproc/remoteproc1/trace0
Target# cat /sys/kernel/debug/remoteproc/remoteproc2/trace0
Target# cat /sys/kernel/debug/remoteproc/remoteproc3/trace0
Target# cat /sys/kernel/debug/remoteproc/remoteproc4/trace0

图 8
功能测试
本小节主要介绍如何基于RPMsg测试Cortex-A53与Cortex-M4F核间通信,以及Cortex-A53与Cortex-R5F核间通信。
- 基于Linux应用程序测试
本次测试使用TI官方提供的rpmsg_char_simple工具,我司提供的文件系统已移植该工具。
进入评估板文件系统执行如下命令,查看程序相关参数。
Target# rpmsg_char_simple -h

图 9
参数解析:
rproc_id:核心ID,默认是0;
num_msgs:发送的RPMsg数据包数量,默认是100;
rpmsg_dev_name:RPMsg驱动设备节点,默认为不使用;
remote_endpt:对端核心接收RPMsg的端点,默认为14。
Cortex-M4F核心、Cortex-R5F核心对应的ID,如下表所示。
表 3
|
核心 |
ID |
|
r5fss0_0 |
2 |
|
r5fss0_1 |
3 |
|
r5fss1_0 |
4 |
|
r5fss1_1 |
5 |
|
m4fss0_0 |
9 |
执行如下命令,Cortex-A53核心发送RPMsg数据包,Cortex-R5F核心(r5fss0_0)接收。
Target# rpmsg_char_simple -r 2 -n 10

图 10
执行如下命令,Cortex-A53核心发送RPMsg数据包,Cortex-R5F核心(r5fss0_1)接收。
Target# rpmsg_char_simple -r 3 -n 10

图 11
执行如下命令,Cortex-A53核心发送RPMsg数据包,Cortex-R5F核心(r5fss1_0)接收。
Target# rpmsg_char_simple -r 4 -n 10

图 12
执行如下命令,Cortex-A53核心发送RPMsg数据包,Cortex-R5F核心(r5fss1_1)接收。
Target# rpmsg_char_simple -r 5 -n 10

图 13
执行如下命令,Cortex-A53核心发送RPMsg数据包,Cortex-M4F核心(m4fss0_0)接收。
Target# rpmsg_char_simple -r 9 -n 10

图 14
- 基于Linux驱动程序测试
本次测试使用TI官方提供的rpmsg_client_sample驱动程序,我司提供的文件系统已移植该工具。
执行如下命令,查看各个核心对应的virtio ID。
Target# cd /sys/bus/virtio/drivers/virtio_rpmsg_bus
Target# ls virtio* -l

图 15
表 4
|
设备节点 |
核心 |
Virtio ID |
|
5000000.m4fss |
m4fss0_0 |
0 |
|
78000000.r5f |
r5fss0_0 |
1 |
|
78200000.r5f |
r5fss0_1 |
2 |
|
78400000.r5f |
r5fss1_0 |
3 |
|
78600000.r5f |
r5fss1_1 |
4 |
进入评估板文件系统执行如下命令,加载驱动,并设置RPMsg数据包数量为10。
Target# modprobe rpmsg_client_sample count=10 //count表示发送的RPMsg数据包数量。

图 16
执行如下命令查看驱动运行信息,打印"incoming msg x (src:0xd)"表示数据收发成功,即核间通信成功。
Target# dmesg | grep rpmsg_client_sample

图 17
案例编译
打开CCS11.2.0软件,依次点击菜单栏"Project -> Import CCS Projects...",导入案例工程。

图 18
在弹出的如下界面,选中"ipc_rpmsg_echo_linux_am64x-evm_system_freertos",并勾选"Automatically import referenced projects found in same search-directory",然后点击Finish,导入Cortex-R5F核心与Cortex-M4F核心的全部工程。

图 19
在工程界面,右键选中ipc_rpmsg_echo_linux_am64x-evm_system_freertos,选择"Rebuild Project",重新编译全部工程。

图 20
编译完成后,将会在各个核心对应工程的Debug目录下生成可执行程序。

图 21
关键代码
- 创建任务并调度任务运行。

图 22
- 等待Linux就绪。

图 23
- 创建两个接收RPMsg的任务:用于接收Linux内核、Linux用户空间、Cortex-R5F核心(r5fss0_0)的RPMsg。

图 24
- RPMsg接收任务。

图 25
嵌入式工程师进阶,基于AM64x开发板的IPC多核开发案例分享的更多相关文章
- [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信
一.前言 下面是本系列文章的前几篇: [Intel Edison开发板] 01.Edison开发板性能简述 [Intel Edison开发板] 02.Edison开发板入门 [Intel Edison ...
- 痞子衡嵌入式:把玩i.MXRT1062 TencentOS Tiny EVB_AIoT开发板(1) - 开发环境搭建与点灯
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1062 TencentOS Tiny EVB_AIoT开发板环境搭建与点灯. 腾讯 TencentOS 团队于2021年1 ...
- [Intel Edison开发板] 04、Edison开发基于nodejs和redis的服务器搭建
一.前言 intel-iot-examples-datastore 是Intel提供用于所有Edison开发板联网存储DEMO所需要的服务器工程.该工程是基于nodejs和redis写成的一个简单的工 ...
- [Intel Edison开发板] 06、Edison开发在linux中烧写、配置、搭建开发环境
1.前言 linux上烧写.配置.搭建Edison环境,千万不要用默认的setup tool for ubuntu!!! (即使,你用的就是ubuntu) 因为,其默认的工具会从一个坏链接下载配置文件 ...
- [Intel Edison开发板] 03、Edison开发IDE入门及跑官方提供的DEMO
一.启动Eclipse爱迪生开发板IDE eclipse开发环境在iss-iot-win_03-14-16中,但是一定每次都是点bat脚本启动,否则就会少东西(windows->preferen ...
- [Intel Edison开发板] 02、Edison开发板入门
一.前言 Start from the link: 开始学习的链接 上面链接是官网的教程,按照教程可以开发板入门: 其中第一步是了解开发板,涉及到如何组装.如何连线.一些主要的接口简单介绍等信息: 第 ...
- Digispark(ATTINY85) 微型开发板驱动安装与开发环境配置教程
前几天无聊就弄了弄这个玩,网上教程可能有点杂,在这里就总结一下. Digispark开发板(也就是badusb)能干什么,自己搜去,/坏笑. 1.准备材料:Attiny85微型 USB接口开发板 Di ...
- 基于全志A40i开发板——Linux-RT内核应用开发教程(1)
目录 1 Linux-RT内核简介 3 2 Linux系统实时性测试 3 3 rt_gpio_ctrl案例 10 4 rt_input案例 15 本文为Linux-RT内核应用开发教程的第一章节--L ...
- 迅为iMX6UL开发板低功耗高能效开发平台
迅为i.MX 6UL开发板基于ARM Cortex-A7内核,主频高达528 MHz,内存:512MDDR3,存储:8G EMMC,支持2路CAN,2路百兆以太网,4路USB HOST,8路串口,以及 ...
- IMX6开发板Qtopia2.2.0开发环境搭建以及编译镜像
搭建 Qtopia2.2.0 开发环境,需要先搭建 Android 的编译环境,然后在 Android 编译环境的基础上,再搭建 Qtopia2.2.0 编译环境.以下内容基于迅为-iMX6开发板.Q ...
随机推荐
- HouseParty原创故事全角色关系及主线剧情介绍(最新版)
这是原创故事的主要的角色的主线及支线剧情的介绍及攻略和注意事项等. 这里的图比哔哩哔哩上的图清楚一点,哔哩哔哩同号:宅猫君007 以上是全角色的关系图 最新版本的游戏下载就在我的网站上:https:/ ...
- vim简明文档
替换 替换当前行第一个 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky 从当前行替换到最后一行 :%s/vivian/sky/g 替换所有行中 vivian 为 sky 查找 ...
- ls的输出格式
在Linux中,如果在一个目录下面执行ls -al命令,输出格式如下: ls -al总共输出7列,下面对每一列进行说明. 第一列表示这个文件的权限与类型,它总共有10位,每个位的作用如下图所示: 其中 ...
- win系统执行脚本报错策略更改无法加载文件 C:\Users\xx\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本
Start-Process powershell -Verb runAs Get-ExecutionPolicy Get-ExecutionPolicy -List set-ExecutionPoli ...
- 热烈祝贺 Splashtop 荣获“最佳远程办公解决方案”奖
2021年2月,第十四届加拿大年度"经销商选择奖"落下帷幕.Splashtop在此次评选中荣获"最佳远程办公解决方案"奖,获得该奖项的还有微软和谷歌. 一直 ...
- 80x86汇编—寻址方式
文章目录 术语解释 8086寻址方式 直数寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 比例变址寻址方式 基址比例变址寻址方式 术语解释 EA:有效地址,通过段地址:偏移地址组合得到的Effec ...
- RoslynPad的简单使用
虽说Visual Studio被我们戏称宇宙最强IDE,但是平常随手写段C#代码进行验证或者语法校验,属于牛刀小试了,显然轻量级C#编辑器更适合这种场景,目前较为流行的则是一代神器 LINQPad,但 ...
- rabbit 的下载与安装
因为RabbitMQ是用erlang语言开发的,所以我们在安装RabbitMQ前必须要安装erlang支持. erlang的下载地址:https://www.erlang.org/downloads ...
- 开源项目 cloud-platform 的本地部署
F7 单步调试,进入函数内部 F8 单步调试,不进入函数内部 F9 继续执行,进入下一个断点或执行完程序 Shift+F7 选择要进入的函数 Shift+F8 跳出函数 Ctrl+F8 设置/取消当前 ...
- vue我自己的动态菜单思路
1.在router里把所有的路由都加上. 2.后端存储路由path和其他设计需要的信息. 3.登录后,后端返回菜单树,根据权限不同,返回的菜单不同,并且还要返回每个path代表的页面具有的权限数组.可 ...