找回密码
 注册
关于网站域名变更的通知
查看: 214|回复: 1
打印 上一主题 下一主题

嵌入式工程师进阶,基于AM64x开发板的IPC多核开发案例分享

[复制链接]

该用户从未签到

跳转到指定楼层
1#
 楼主| 发表于 2024-7-24 11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Tronlong123 于 2024-7-25 09:21 编辑 ) v, c. t) h% u- b4 a9 [( F# V- ^
4 P7 |) e, O- J5 p: `4 K9 J
                          
7 t0 H( d* q/ {! o 前 言
5 ^; g5 r! ~5 _& d' N' A
$ l7 ^. _0 j/ P. N 本文档主要说明AM64x基于IPC的多核开发方法。默认使用AM6442进行测试演示,AM6412测试步骤与之类似。4 C. R- d2 w+ Y9 k
: [2 h' M, I2 N: A' W
适用开发环境如下:
( D5 M% |3 S' Y- z Windows开发环境:Windows 7 64bit、Windows 10 64bit
) O1 Q  V/ g3 _ 虚拟机:VMware15.5.50 c* y0 }, E! o8 M, N$ q
Linux开发环境:Ubuntu 18.04.4 64bit( d8 h1 n7 K* k# @( a, A% H
Linux Processor SDK:ti-processor-sdk-linux-rt-am64xx-evm-08.01.00.39
. P( H3 J0 j2 z0 a- p1 P; h U-Boot:U-Boot-2021.01
/ f* q- I+ D; E. j, C* T CCS版本:CCS11.2.0
# |7 c% `9 u2 l2 ~$ a' e mcu+ SDK:mcu_plus_sdk_am64x_08_03_00_18( }% _0 m$ \( G4 q1 n8 N, U
SysConfig:sysconfig-1.12.1_2446
6 H$ G* Z3 d! _$ W8 e/ O GCC AARCH64 Compiler:gcc-ARM-9.2-2019.12-mingw-w64-i686-aarch64-none-elf
6 B* O7 u. S' b. y0 N  i 本文测试板卡为创龙科技TL64x-EVM,它是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F多核处理器设计的高性能评估板,由核心板和评估底板组成。核心板经过专业的PCB Layout和高低温测试验证,高性能低功耗,稳定可靠,可满足各种工业应用环境。
. W1 F) p7 H. ?5 @. ^ 评估板接口资源丰富,引出5x Ethernet(两路支持TSN)、2x CAN-FD、多路UART、多路DI/DO、GPMC、PCIe、USB等接口,板载WIFI模块,支持4G/5G模块、NVME硬盘,可选配外壳直接应用于工业现场,方便用户快速进行产品方案评估与技术预研。" J# J) Y5 u) E, |. a

, ]/ [3 E- X3 G2 z1 n  |
+ g4 E9 L  C3 D" N* S2 {0 f7 q

6 \5 `  f2 N% \1 a; [
创龙科技TL64x-EVM 正视图

- k8 m- @1 O3 @- _( v) {
用户使用核心板进行二次开发时,仅需专注上层运用,降低了开发难度和时间成本,可快速进行产品方案评估与技术预研。
0 Z/ D, f0 B; z7 ~3 k AM64x是SOC多核处理器,一般情况下,Cortex-A53核心运行Linux系统,Cortex-R5F/Cortex-M4F核心运行Baremetal(裸机)或RTOS(FreeRTOS等)。
  ]/ v! e) R% @2 q" X, E  ~ ARM基于Linux的remoteproc/rpmsg驱动程序,可以实现Linux内核与运行RTOS的从处理器上的IPC驱动程序通信,具体框图如下图所示。7 p2 |! K# Z# B# l* L$ U% S( \5 S3 x
/ _0 f0 q& f9 e

* O& ^, s9 s+ m; y" f  V$ M

, K9 M% a' W) w5 f& p( Y+ [
图 1

! {* V& I" y, M; \7 _; k
IPC多核开发案例位于“4-软件资料\Demo\RTOS-demos\”目录下,案例project目录存放工程源码,bin目录存放可执行程序文件。2 @6 O( _5 o) d7 z% S8 \" P0 b& V
; H  F! N( W% g3 ~
4 Y) j; C8 h  B0 d; u7 l* b5 c* x
( x. R2 R, W( r2 r
表 1
- v' }" N3 p! h* C* H  f, M
ipc_rpmsg_echo_linux案例. L* M9 G: i7 }4 V2 q
案例说明 案例功能:基于RP Message的API实现Cortex-A53与Cortex-R5F核间通信,以及Cortex-A53与Cortex-M4F核间通信。9 }( }3 n" A# ?7 G- C4 E
程序框图如下图所示。
* c) h! M, b; r5 K0 u6 ?  {
( j) c" n4 d! [3 I* K3 X# M" x

% ?# ^/ p3 r6 ]

- o$ ^1 B* p% S8 G8 _% A+ k
图 2 程序框图

0 U8 q! ^/ o0 M& t3 ~2 m
RTOS工程创建了两个RPMsg端点,其中一个端点与Linux内核交换消息,另外一个端点用于与Linux用户空间、裸机或RTOS交换消息。
, c) B! N' W. p1 v7 Y. \, f9 p2 G2 C4 Z" {3 i: B( v( W

6 L8 X. ]; H" ^
/ L2 r, v# v% S6 F& ~' c% K8 A2 X
图3

4 x2 v# J, c7 ?: M
案例测试
8 v! {" I* k/ B- X3 ?: I7 t 环境搭建 请将案例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可执行程序拷贝至评估板文件系统任意目录下。" b. y' H0 Q7 ^

( m+ ]& N) o/ s8 _% W3 {/ V4 P

/ ~7 w! G; m! y6 b
" g3 u" j: n" A; d8 V* I$ r0 c% [
图 4

& Y% C) @$ |2 T: ?) c# G3 r
进入评估板文件系统,执行如下命令,删除原来的软链接。: \: H! Z9 ^& r1 \/ C1 |9 p1 t3 g
Target# rm /lib/firmware/am64-main-r5f0_0-fw6 Z; o; b; J  {' U
Target# rm /lib/firmware/am64-main-r5f0_1-fw
+ {  _2 m0 c. _( Y; F Target# rm /lib/firmware/am64-main-r5f1_0-fw. w; X" g1 _( a6 W! ^
Target# rm /lib/firmware/am64-main-r5f1_1-fw, y/ }7 R/ X! k' O3 C. [6 W
Target# rm /lib/firmware/am64-mcu-m4f0_0-fw4 [4 U5 N* k6 M) \9 X
6 {+ V! y  a  g/ u( u1 l- U  |1 p
4 c  E% r* G# P2 E2 J
% {# {2 B% ~1 {, Y- k- s$ c, J
图 5

' Y: ?- E" p4 d
执行如下命令,创建新的软链接。* `. U9 H8 X" Z- |: I, G# B
Target# ln -sf /home/root/am64-main-r5f0_0-fw /lib/firmware/am64-main-r5f0_0-fw- V9 Z$ F9 K# ?. X) {( ?
Target# ln -sf /home/root/am64-main-r5f0_1-fw /lib/firmware/am64-main-r5f0_1-fw2 S/ Z9 B  B, P: d% K- Y
Target# ln -sf /home/root/am64-main-r5f1_0-fw /lib/firmware/am64-main-r5f1_0-fw
# O4 T2 Y( p. f1 X0 @+ r# w% h4 k Target# ln -sf /home/root/am64-main-r5f1_1-fw /lib/firmware/am64-main-r5f1_1-fw
$ |0 G& [( Y' d$ Y, K& b% F Target# ln -sf /home/root/am64-mcu-m4f0_0-fw /lib/firmware/am64-mcu-m4f0_0-fw
0 f- }! b% E: _* w5 G! @# t6 ]* E' a" _1 H3 b# V& Q) I6 a' Q

/ p4 D; U* p, T5 m8 E

9 z$ ^/ ~: W8 G# o0 E
图 6
! ^# x8 _" ~' r
请将评估板重启,在系统启动过程中,Cortex-R5F、Cortex-M4F核心将会引导启动。在评估板文件系统执行如下命令,查询Cortex-R5F、Cortex-M4F核心与remoteproc关系。% _* v* ^- n7 @) q) p* g+ l9 G
Target# head /sys/class/remoteproc/remoteproc*/name& Y( \# @# a) I* f$ u( @; r- _
编辑
0 b& n0 |" C9 c; b, q* I+ ]9 U% B- y! @7 j. Y

# A$ ~4 Y' h! J# M

, |; r+ p7 G# f
图 7
; w3 Y7 x' F% P' P; \4 X8 a  @, v3 y
Cortex-R5F、Cortex-M4F核心与remoteproc关系如下表所示。AM6412包含1个Cortex-R5F核心:r5fss0_0;AM6442包含4个Cortex-R5F核心分别为:r5fss0_0、r5fss0_1、r5fss1_0、r5fss1_1。
2 ~4 M; N4 @, h( u3 P: A; m, G* p5 o- w  O1 p( x8 T1 ?" z: r: O2 o/ `+ D) N

$ _, k* N. x- ~# k, Y. X5 \! v

8 [2 T* U$ W+ t/ y
表 2

% e5 z2 w* d% ^: _6 J, i
备注:核心与remoteproc对应关系,请以实际情况为准。
7 V# ^8 y  w: c8 b 执行如下命令,可查看Cortex-M4F、Cortex-R5F核心程序运行日志。6 j: k5 [: G- i) |; b
Target# cat /sys/kernel/debug/remoteproc/remoteproc0/trace03 r2 H+ B+ P7 O, @0 S4 W% U4 ?0 |7 c
Target# cat /sys/kernel/debug/remoteproc/remoteproc1/trace0
) n! e# u' t) A& z2 z! E Target# cat /sys/kernel/debug/remoteproc/remoteproc2/trace0
; L; w8 @( R' z9 z2 d  d+ _" m5 ~ Target# cat /sys/kernel/debug/remoteproc/remoteproc3/trace0; f, ]4 M% ^0 i% |
Target# cat /sys/kernel/debug/remoteproc/remoteproc4/trace0& `) _8 |- R* ]$ d- m& f
  @7 s( |! i$ _& f5 Y( @& y6 x

# R; e- _4 P7 g4 F

1 S2 O9 [' l7 V6 o/ t2 |( y- U. V
图 8

2 N" d' S" O+ N
功能测试 本小节主要介绍如何基于RPMsg测试Cortex-A53与Cortex-M4F核间通信,以及Cortex-A53与Cortex-R5F核间通信。
$ V" C- K) S) b& [( @
  • 基于Linux应用程序测试
    ' l' u& e% N! u/ y9 o# `4 l
本次测试使用TI官方提供的rpmsg_char_simple工具,我司提供的文件系统已移植该工具。) |+ O! q, F& w9 a( q
进入评估板文件系统执行如下命令,查看程序相关参数。7 f9 i7 s! G( `
Target# rpmsg_char_simple -h' \0 }, C! [5 y" m3 b* Y

/ L* Z4 v1 e# e; B8 T" ~0 I

' F, l: U, s1 K" a9 m' [

6 d: E$ D" p$ T
图 9
" _1 L7 P8 p8 V* j
参数解析:* R1 S6 X/ r; v3 {4 C, n( g' R
rproc_id:核心ID,默认是0;% W& x3 j8 E/ p2 }  \
num_msgs:发送的RPMsg数据包数量,默认是100;  X5 L$ u- @% ?2 P
rpmsg_dev_name:RPMsg驱动设备节点,默认为不使用;6 _+ ~- Q; b# n' H) y. X
remote_endpt:对端核心接收RPMsg的端点,默认为14。8 K) [& |7 p1 l# h2 S
Cortex-M4F核心、Cortex-R5F核心对应的ID,如下表所示。
% N% i6 F7 R" X% I& ?' b( g4 |0 r5 O
0 y* ]+ \# r5 P- Z/ Q

4 S' r) M& Y, Q3 v# P
1 ^  V2 [" Y  c
表 3
: H! C& @3 v$ [4 N1 H# j' v
执行如下命令,Cortex-A53核心发送RPMsg数据包,Cortex-R5F核心(r5fss0_0)接收。
+ d9 n+ y' b$ X9 W" A8 w Target# rpmsg_char_simple -r 2 -n 10
) U- h: f; d/ k5 {$ T" U8 G
) b2 D" \: ~/ S( a% C
; }8 c0 B. T( p9 i

0 U- ~0 x/ `6 ?  R8 `0 d" Q
图 10

) }2 {! [. M3 W5 v# o; X+ E) |
执行如下命令,Cortex-A53核心发送RPMsg数据包,Cortex-R5F核心(r5fss0_1)接收。! |! J! ~; c4 [7 L2 v
Target# rpmsg_char_simple -r 3 -n 108 P- i6 a. N! A( X+ @5 W
' c/ g8 m; K$ W/ p+ C' F& n$ A
& I& D3 q8 _1 H% i' I$ e

7 h/ v" j* C! C: C0 b
图 11

5 f( }6 }3 W7 c
执行如下命令,Cortex-A53核心发送RPMsg数据包,Cortex-R5F核心(r5fss1_0)接收。, E3 n/ S( K0 I- o, b+ ]1 |' m1 c
Target# rpmsg_char_simple -r 4 -n 10
7 @( L! w1 G' {- l2 x' v
1 p: a  y9 l7 i$ P7 J$ i! U
2 D: F/ c9 t$ E  e
0 ^- `) R9 c4 N% [- q& o
图 12
$ [3 J& ]# F. @5 ^* e) z2 A
执行如下命令,Cortex-A53核心发送RPMsg数据包,Cortex-R5F核心(r5fss1_1)接收。+ _5 g1 c) D- k; H
Target# rpmsg_char_simple -r 5 -n 10
5 l+ M3 \) M+ b; K; v. ^( j) G( [' g8 i( q+ u3 _
) m; A* |) d+ k/ Y5 ~, h; V
' @7 F1 M& Y; |. `+ a/ u
图 13

& I  J8 @" n. A7 I$ f9 @  r% b
执行如下命令,Cortex-A53核心发送RPMsg数据包,Cortex-M4F核心(m4fss0_0)接收。
  f( O. d5 Q0 D: M Target# rpmsg_char_simple -r 9 -n 10' [: p3 E1 @  L% u7 @

- L2 \7 N' V' ?/ U7 _/ w( d

% y; r6 S  H% z4 p
" {8 U: o3 l& ^* [' T6 E1 u# n+ ^" ]
图 14
& Z% v4 C- `9 A4 C6 P; \
  • 基于Linux驱动程序测试
    ) X( `; @/ u( y" X7 U
本次测试使用TI官方提供的rpmsg_client_sample驱动程序,我司提供的文件系统已移植该工具。9 Q# g& H6 s+ s) {
执行如下命令,查看各个核心对应的virtio ID。
( D" @. @- @1 ]: I Target# cd /sys/bus/virtio/drivers/virtio_rpmsg_bus' w" y2 f# s) J( {& u
Target# ls virtio* -l
: N% x1 u2 N( B6 v! Y; {
0 T; j* P2 Y/ [. f4 |8 K  y' O. I

: d0 k1 \: K9 Q

9 |2 [& {2 s* _" v& s% Y5 G
图 15

# X% I5 u6 e' g4 q7 ]) d0 k
1 _; A& ^5 O& v* }7 z
表 4
2 R# i7 F3 P! k3 p) K+ u: x( Y
进入评估板文件系统执行如下命令,加载驱动,并设置RPMsg数据包数量为10。- i' H/ h( F  e5 K9 ^; W
Target# modprobe rpmsg_client_sample count=10 //count表示发送的RPMsg数据包数量。
( Z! t5 h7 f9 T0 d" N' `6 a; `! d+ y0 |, H' C

. ~$ U# u, N0 o; z9 C1 z* ]
4 F# Q% Y- K% ~- _
图 16

0 y, d+ ~: j  \2 Q  r- A# W0 `. n
执行如下命令查看驱动运行信息,打印"incoming msg x (src:0xd)"表示数据收发成功,即核间通信成功。7 x- O* s$ ]! B% l/ V# w2 N0 P$ q1 L
Target# dmesg | grep rpmsg_client_sample
2 i, R  w5 P6 k! G7 ?
1 V6 C3 E* P7 h6 t# q" l  D4 V1 R

5 L2 Y5 B! X, N! `4 m9 y8 w

" G- X) R4 V- r8 ^
图 17
8 T! V7 N4 U  L+ `) P+ z& U
案例编译 打开CCS11.2.0软件,依次点击菜单栏"Project -> Import CCS Projects...",导入案例工程。& g! g4 q9 r  z3 x0 h& F% ?

; f7 H" `! M  J
5 w- D" h0 N, [6 e3 K0 d7 s

- F. E: N9 \4 p3 e. q2 V1 z
图 18

( w/ n8 H5 x9 w. G! j# e! u
在弹出的如下界面,选中"ipc_rpmsg_echo_linux_am64x-evm_system_freertos",并勾选"Automatically import referenced projects found in same search-directory",然后点击Finish,导入Cortex-R5F核心与Cortex-M4F核心的全部工程。$ r, j; ?( p7 o
' k$ J, z+ W/ d$ n  e
1 X4 s' O$ T, T5 c9 I
* Z/ \. X  M& M; R& ]' L" X2 U
图 19

/ M7 p) |$ M3 A- q' I% l" Q
在工程界面,右键选中ipc_rpmsg_echo_linux_am64x-evm_system_freertos,选择"Rebuild Project",重新编译全部工程。% N. \: j' B( W* b0 X# V/ r6 J

' p" n! B3 W5 v) x7 G
" _& W8 \6 K* l! C
6 t% p- L* M  N5 d+ M
图20

# P. R$ Q# E9 m5 {  `' f+ D
编译完成后,将会在各个核心对应工程的Debug目录下生成可执行程序。
; N. J: ~* `: U2 N
8 u+ K. `9 ~5 ]1 I. x. O
+ a. Q# |- I' ]# V% F
% e7 l3 |5 k* g1 P0 Z6 a3 r
图 21

5 G: c" V" u% v; Q8 ~
关键代码' }" \4 F' w  S& r
  • 创建任务并调度任务运行。
    ' S% T+ G1 P' y# g2 ]
/ |& `- `2 q! \# V2 Q* F
图 22
  • 等待Linux就绪。
    ( ^$ U, c8 d( Y7 l# k% f4 ?& r

: ], p$ h& E& [6 s
图 23
4 f2 f+ |* u+ o8 |6 f! c
  • 创建两个接收RPMsg的任务:用于接收Linux内核、Linux用户空间、Cortex-R5F核心(r5fss0_0)的RPMsg。  z/ ]. Y1 Q1 z2 U$ o: A

4 Y/ O1 |" T: e; A: A* Y
图 24
  • RPMsg接收任务。; K# H4 s2 h6 |5 N0 o9 l

- s1 L( r" g& R3 Y+ K# q$ l
图 25
  c! n) O! v" W0 G

该用户从未签到

2#
发表于 2024-7-24 18:13 | 只看该作者
程序写的很规范
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 13:50 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表