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

基于 TI Sitara系列 AM64x核心板——程序自启动说明

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
                          前 言
% M, A- y. A: k* \; V6 l! ` 本文主要介绍AM64x的Cortex-A53、Cortex-M4F和Cortex-R5F核心程序自启动使用说明。默认使用AM6442进行测试演示,AM6412测试步骤与之类似。
8 Z4 M$ \! ?- W) L4 y  ]: o' d' y5 B, j( {' }% h

/ [$ h$ B& M- x+ V# q( _) { 本说明文档适用开发环境如下:
1 \: x3 ~5 B0 s. [
8 v# h" \0 O' r7 r2 W! j: n, o Windows开发环境:Windows 7 64bit、Windows 10 64bit; W) ?9 f! _( B
虚拟机:VMware15.5.59 m( C* u1 L8 p
Linux开发环境:Ubuntu 18.04.4 64bit; A% M. Z( y! r- P& s! }5 f
Linux Processor SDK:ti-processor-sdk-linux-rt-am64xx-evm-08.01.00.39
4 V/ A) P8 _2 N0 X' m5 ^ U-Boot:U-Boot-2021.01  R, t1 L9 W! h" z# U9 r8 L5 N1 s
CCS版本:CCS11.2.0
6 d8 l7 G# }  [+ R mcu+ SDK:mcu_plus_sdk_am64x_08_03_00_18
0 z. d. Z3 Y" ^2 ^# v  f SysConfig:sysconfig-1.12.1_2446
- f; l: q3 q9 v6 x  r6 D- }& T0 P GCC AARCH64 Compiler:gcc-ARM-9.2-2019.12-mingw-w64-i686-aarch64-none-elf8 V9 b) J5 \: F$ }7 S) k* M
本文测试板卡为创龙科技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和高低温测试验证,稳定可靠,可满足各种工业应用环境。
3 ?5 m4 H& U: c/ T. a( t& A
, Y) X9 V% ?. x6 i/ G
& ~+ \) Q. ^& y* S5 T$ r/ U
4 V" c9 l5 _; A  |

1 S6 `) \7 O/ K! U7 E
用户使用核心板进行二次开发时,仅需专注上层运用,降低了开发难度和时间成本,可快速进行产品方案评估与技术预研。' Q" u7 o$ F! Y  @
! B1 z- Q5 N7 }

) B8 [$ p: r6 ?) G: _  x; V& X: L& c 基于SBL引导裸机、FreeRTOS程序启动
9 p) l1 O4 S3 g  c 程序启动流程说明
/ T8 T: V) N& v) x) V9 l  a4 j 评估板上电后,固化在CPU内部的RBL将会先运行,RBL根据评估板BOOT SET从启动介质(如eMMC,Micro SD、SPI FLASH)读取SBL,然后通过SBL引导应用程序启动。6 Z/ N, q* `% {" u
程序启动流程如下图所示。
3 v' ~# E8 F- `8 n
- T1 \8 ?0 q% z& S0 ]5 K7 q

1 U' f6 L* r+ Z/ D* d( z
; `/ g2 w! U& ^( [( U3 `' f
图 1
目前官方提供的MCU+ SDK(版本为mcu_plus_sdk_am64x_08_03_00_18),SBL将会先读取应用程序至MSRAM,然后再进行解析。由于MSRAM空间有限,分配给SBL使用的内存空间仅512KByte,并且SBL运行需使用部分MSRAM空间。因此,为确保SBL引导应用程序正常启动,应用程序大小不能超过380KByte。
, i, L% L9 X9 L+ q* z" v4 T) n& H: a" D! k: ?7 P; Y( E5 _

; a8 u. T3 \6 r, }& R
6 ~6 g: K% p/ ^. l' ]
图 2

- T  O0 ?6 K6 p& u0 y$ K
, |( |( P$ L! L/ I( d" H6 \8 y
基于Micro SD卡启动( [' J9 C) W* F) ~. _, U
启动卡制作
$ [+ S) o# R8 U* }" A" ?2 r 请准备一张FAT32格式的Micro SD卡,通过读卡器将Micro SD卡连接至PC机。! ~7 Y9 E% [% o& }0 q4 `# O
双击产品资料“4-软件资料\Tools\Windows\”目录下PartManFree-Setup.exe分区管理软件,按默认安装即可。安装完成后,打开分区管理软件,将会自动识别到Micro SD卡分区,请右键选中该分区,点击"Set Active"设置为活跃分区,如下图所示。
, n) d, T& [/ Z8 M3 Y7 ]' s* G9 W& m; C$ p. I
) U; }+ G. x; e* o
8 g" H) C. j: h/ m* x
图 3
进入MCU+ SDK组件安装目录"C:\ti\mcu_plus_sdk_am64x_08_03_00_18\tools\boot\sbl_prebuilt\am64x-evm\",将sbl_sd.release.tiimage拷贝至Micro SD卡,并重命名为tiboot3.bin,如下图所示。
5 m" D" V- ?1 A  z 备注:sbl_sd.release.tiimage为官方提供的SBL镜像。! m; g% e3 o( b/ c

- B7 E1 ]" i" _# K. W4 m
1 I& l6 c$ A' Y6 H7 _9 H1 ~

# X9 ~! I) j. `  e2 U5 r0 Z
图 4
4 W, p  W3 k4 i2 L2 `7 \

& }% y6 _) F& C2 A/ N
图 5

7 F3 g" n3 E( x0 p
单核启动 本小节以Cortex-A53核心的led_flash裸机工程为例进行演示,Cortex-M4F和Cortex-R5F核心操作步骤与之类似。
  @: C+ q+ ^* H, I! q- S! O1 a5 ?% a 请参考《FreeRTOS、Baremetal案例开发手册》文档,正确编译产品资料“4-软件资料\Demo\Baremetal-demos\led_flash\project\”目录下的led_flash_a53ss_nortos工程,然后将编译生成的led_flash_a53ss_nortos.appimage镜像文件拷贝至Micro SD卡,并重命名为app。
9 @2 U& T5 ]1 w, e# k
# X$ T, S; Q1 \* X2 p# E

( {$ n7 [4 [/ J! f4 E( q
9 w+ \, z: J* m# l' f2 b/ o, b
图 6

' ?6 W- ~" h2 M# E3 o! H
! W) x3 `1 c- j8 w- C9 a, w
图 7

( S9 q* I( R1 k4 |+ @, p; }' z) p6 I
请将Micro SD卡插入评估板Micro SD卡槽,根据评估底板丝印将启动方式选择拨码开关拨为101000(1~6),此档位为Micro SD启动模式。然后使用Micro USB线连接评估板的USB TO UART0调试串口至PC机,3 R' _& h" H/ \
请将评估板上电启动,串口调试终端将会打印如下类似启动信息。同时,可观察到评估底板LED1、LED2闪烁,说明程序自启动成功。
+ U, X# p0 l2 M  q7 ?2 o* }7 t+ D8 ~
' A6 z3 Z) R3 j7 T

  h; [" \: A- b
图 8

' \9 l& [9 Q5 ^
多核启动 本小节以Cortex-A53、Cortex-M4F和Cortex-R5F核心的led_flash裸机工程为例进行演示。9 F# X5 _: T/ ~8 z
请在磁盘根目录新建一个非中文文件夹test,将产品资料“4-软件资料\Demo\Baremetal-demos\led_flash\bin\”目录下的led_flash_a53ss_nortos.out、led_flash_m4fss_nortos.out、led_flash_r5fss_nortos.out全部拷贝至该目录下。, j( R+ k0 b' y3 \' k/ w4 G4 N- S9 `

! `+ {7 S# n$ T6 l8 U( {8 K5 i
图 9
2 f- H7 e7 s2 d  x# ~
右键Windows按钮,点击"Windows PowerShell(I)",打开Windows PowerShell终端。
$ j, ?  Q" F" L4 T
2 [9 ~+ g' X) x  ]/ U2 D, _  f/ l

3 y9 G; R1 U* B, F3 `/ q3 }
& V" B% w" |9 K. V1 N0 ^: H
图 10
! z% `9 ~! E/ D7 S2 J* X# B
在Windows PowerShell终端执行如下命令进入test目录。' T3 W/ t( b3 k1 W$ d/ L- \
Window# cd E:\test\
' Y! U; L5 x# W9 t# d3 t
: j  i0 Q. Q# ^0 Z1 H

" X7 `  x. F& O% e8 m1 I9 n

8 Z( K# Z5 n9 c% v2 C7 c% I6 k8 [
图 11

9 p% ^# |* {% w- J
  • rprc文件生成4 X4 D0 l  F: ~# p/ C
在Windows PowerShell终端执行如下命令,基于xxx.out文件使用CCS和MCU+ SDK生成xxx.rprc文件,xxx.rprc文件已包含可加载段的bin文件。CCS与MCU+ SDK路径请以实际情况为准。1 z" l( Z' }" T+ P8 x4 c2 j  x5 S
Window# C:\ti\ccs1120\ccs/tools/node/node C:/ti/mcu_plus_sdk_am64x_08_03_00_18/tools/boot/out2rprc/elf2rprc.js led_flash_a53ss_nortos.out
+ v: X% ~* v9 f, \2 F6 q$ y0 E3 D+ Q+ a Window# C:\ti\ccs1120\ccs/tools/node/node C:/ti/mcu_plus_sdk_am64x_08_03_00_18/tools/boot/out2rprc/elf2rprc.js led_flash_m4fss_nortos.out
# o. O* w  y/ ?" g& {2 m& ~: }0 w) W! z Window# C:\ti\ccs1120\ccs/tools/node/node C:/ti/mcu_plus_sdk_am64x_08_03_00_18/tools/boot/out2rprc/elf2rprc.js led_flash_r5fss_nortos.out& ~2 x% u" T7 d" `, M, L. G
2 P. n$ T% F, D3 m" e

4 _4 u! R0 c/ a+ ^. v' }
8 ^- X: W! M- W4 b$ n( u
图 12
. c  ^$ o1 |7 f
执行完成后,将会在当前目录下生成了led_flash_a53ss_nortos.rprc、led_flash_m4fss_nortos.rprc、led_flash_r5fss_nortos.rprc文件。
0 w% V$ y$ ]: ^; `6 d
- x; a$ _+ m- @3 q: \% s# r
* s" v, v* t. n0 K6 S

6 i2 K; s9 `, f8 q! g: j7 k+ G
图 13

& C# c7 J! Y6 ^& I
  • appimage文件生成  W0 H& q, t5 k9 K
基于xxx.rprc文件生成镜像xxx.appimage,需指定启动核心的ID,对应关系如下表所示。) k3 l  E1 _* h- O
备注:AM6412包含1个Cortex-R5F核心:r5fss0_0;AM6442包含4个Cortex-R5F核心分别为:r5fss0_0、r5fss0_1、r5fss1_0、r5fss1_1。
# W  w% ~7 m. I' @! B- j- o, ]5 @% {0 j0 S* K: Q! c

$ S! b6 h4 K  `

0 p& M4 K  _  ~7 ^9 V
表 1

5 S" U! x) E6 c; _4 q
在Windows PowerShell终端执行如下命令,将Cortex-A53、Cortex-M4F和Cortex-R5F核心的led_flash可执行程序合并为led_flash.appimage,并指定运行核心分别为a53ss0_0、m4fss0_0、r5fss0_0。/ W0 t* n* t' i4 i1 `6 [( E5 E
Window# C:\ti\ccs1120\ccs/tools/node/node C:/ti/mcu_plus_sdk_am64x_08_03_00_18/tools/boot/multicoreImageGen/multicoreImageGen.js --devID 55 --out led_flash.appimage led_flash_a53ss_nortos.rprc@0 led_flash_m4fss_nortos.rprc@14 led_flash_r5fss_nortos.rprc@4
; x3 ~! \. {8 r# Q! N, f

4 Q, m) [2 H9 a2 U; N

! h  \+ t  }$ Z+ P& S7 M7 K: q* o
图 14

" `" h( c1 p7 I) m
执行完成后,将会在当前目录下生成led_flash.appimage镜像文件。% r9 p: W! Q# Z
6 H- Z# F, X1 m' g

9 W* `7 V3 p8 b) q8 D. V
7 f& V- {& T. j) h- `7 P; x% V
图 15
. c- m0 _: W& [7 @1 l; @4 V- A; b5 m
请将生成的led_flash.appimage镜像文件拷贝至Micro SD卡,并重命名为app。! ^7 x  t6 ~( k8 v0 D8 p2 s1 F' E

/ `" j2 ^& w+ B2 F5 P1 k+ h
! n$ B' Z4 a" D) p  v
% W) s; ^, a7 K& T
图 16

$ D; \% \' {' {7 q- |& _
请将Micro SD卡插入评估板Micro SD卡槽,根据评估底板丝印将启动方式选择拨码开关拨为101000(1~6),此档位为Micro SD启动模式。然后使用Micro USB线连接评估板的USB TO UART0调试串口至PC机。
$ s; O4 A7 K" C7 x4 G$ Y2 v0 `8 n7 \1 } 评估板上电启动,串口调试终端将会打印如下类似启动信息。同时,可观察到评估底板LED1、LED2、LED3闪烁,说明程序自启动成功。
/ r) w& r7 N* N* b+ u/ e
, c1 q* J( u, V- E
. u& l1 N, q2 _0 r) l1 O6 x
) n. j: A9 C% Y. ]# ~6 E
图 17
- R' z/ h9 c4 R) H9 I. X# D
基于Linux引导裸机、FreeRTOS程序启动! F. D+ w+ ^' m1 E* \4 N* O; L
基于Linux启动
1 t, v4 \3 Y- o+ F; Z# s6 \4 c 本小节以产品资料“4-软件资料\Demo\RTOS-demos\”目录下的ipc_rpmsg_echo_linux案例为例进行演示。该案例主要实现Cortex-A53与Cortex-R5F核间通信,以及Cortex-A53与Cortex-M4F核间通信。7 P3 s" b  N$ n* `- l: {9 }& p$ p: J
请将案例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镜像文件拷贝至评估板文件系统根目录下。
' |( W0 Z, ~' I& c! M+ {4 n1 T7 F4 [: ]" V

6 K2 d0 U, u2 i. |6 \
* e' X" ~8 _% H- m! g5 a$ w
图 18
' z5 V% B, h/ @- N. D2 u' Q
进入评估板文件系统,执行如下命令,删除原来的软链接。
% p- L' E+ o) h  Q9 j Target# rm /lib/firmware/am64-main-r5f0_0-fw
! s1 A6 g3 E2 s) |6 Z Target# rm /lib/firmware/am64-main-r5f0_1-fw# p2 _& s/ Q' u7 b$ a
Target# rm /lib/firmware/am64-main-r5f1_0-fw9 T5 B  |/ X# L# J, J. w8 S  M
Target# rm /lib/firmware/am64-main-r5f1_1-fw
+ }6 v0 E0 F+ O, A& g  D8 Y+ L Target# rm /lib/firmware/am64-mcu-m4f0_0-fw
: T4 a' B: i- W- p* y3 Y( g% X# E- ^/ h, Q" r6 \6 ]9 c1 _. J
) L2 P5 I" r3 Q+ M+ G
$ r- ^$ d+ E3 g) C4 b
图 19
& p+ c. I4 t5 x' G2 c, y
执行如下命令,创建新的软链接。
; `0 \- f& q) j! g9 [0 H$ }6 X Target# ln -sf /home/root/am64-main-r5f0_0-fw /lib/firmware/am64-main-r5f0_0-fw
5 h1 r( x( c! Z" t/ D2 E- R Target# ln -sf /home/root/am64-main-r5f0_1-fw /lib/firmware/am64-main-r5f0_1-fw0 ?9 c) `5 Q, F6 c4 l0 p$ l7 R& s
Target# ln -sf /home/root/am64-main-r5f1_0-fw /lib/firmware/am64-main-r5f1_0-fw* O( ?! z; C" S/ x
Target# ln -sf /home/root/am64-main-r5f1_1-fw /lib/firmware/am64-main-r5f1_1-fw" Q. f7 G1 F& m+ k. q- \
Target# ln -sf /home/root/am64-mcu-m4f0_0-fw /lib/firmware/am64-mcu-m4f0_0-fw
( X5 K& ^6 ^7 g. z7 w* J, K; w9 P5 `& |# D; H
9 A5 V& V5 N2 ~( I2 |

* Y: m- p1 j& Q6 B4 ^; m% n
图 20
* z6 ^4 `5 _; [; A2 Q) G
请将评估板重启,在系统启动过程中,Cortex-R5F、Cortex-M4F核心将会引导启动。在评估板文件系统执行如下命令,查询Cortex-R5F、Cortex-M4F核心与remoteproc关系。( h2 y+ q; o( ?$ p+ ?
Target# head /sys/class/remoteproc/remoteproc*/name
/ e, {2 h- l5 [; c/ n) N0 x: B- L
, p8 S* w& q" y% p1 c  d; W

& x# z4 ]6 z. z; z) p

' X6 Q# z8 }; V5 y* N/ ?
图 21
& X$ v, l4 C/ v1 q
3 Z: S: A% j4 ]+ G
表 2
. u9 d3 P: [% _6 U( v2 J1 l
备注:核心与remoteproc对应关系,请以实际情况为准。+ l) M* J. @# U6 B6 W
执行如下命令,可查看Cortex-M4F、Cortex-R5F核心程序运行日志。2 ^: @3 q" R; e3 {# @$ R* {
Target# cat /sys/kernel/debug/remoteproc/remoteproc0/trace0
! K  j# u& E& ^9 q Target# cat /sys/kernel/debug/remoteproc/remoteproc1/trace0
" {2 K, I# `, K( f1 O8 F9 q2 | Target# cat /sys/kernel/debug/remoteproc/remoteproc2/trace0
/ \4 A& c9 m" h9 c( k Target# cat /sys/kernel/debug/remoteproc/remoteproc3/trace07 ~; e6 m, E: j; ]( h7 O' E
Target# cat /sys/kernel/debug/remoteproc/remoteproc4/trace0/ m- G! \3 i6 f7 G; F, P* J: h

0 r3 }* m: X3 N4 j. m

& p3 E, }* Q) z) P4 g4 W

! A2 l: I2 w% x& c
图 22
: z9 F2 s5 }0 B
工程配置说明5 D. c. l$ U0 I; m! i: {* Y
本小节主要演示如何在Cortex-R5F、Cortex-M4F核心的Baremetal(裸机)工程与FreeRTOS工程中添加Linux引导配置。
, g2 ^2 c& L* D4 ~0 z/ I% R0 h1 u4 b3 \
% w/ G. n2 b( a3 M1 \! y
内存空间说明3 V5 E* T, B' X/ L
如Cortex-R5F、Cortex-M4F核心的工程需支持基于Linux启动,则需进行内存空间分配,在Linux设备树中已指定内存空间,预留给Cortex-R5F、Cortex-M4F核心使用。内存空间分配如下图所示。- p1 s3 _- }0 |' ~8 y
. {" P& n. x4 ?) o7 a- X

. o3 E* g9 M9 e. e, d3 V7 h
4 p0 A- i: S7 z! x+ R/ b( v: L- S' h
图 23

* V3 T6 h/ y1 d! n1 a2 n
Cortex-M4F工程配置2 H: H& y1 o7 e9 q# Z
本小节以Cortex-M4F核心的led_flash裸机工程为例进行演示。0 W- w1 C  c& o( H6 ^
  • IPC配置  b) m* k3 E, q
在syscfg配置文件,添加IPC配置,具体配置如下图所示。
+ j2 Y3 T+ a  L/ T; a0 \) k' h) ^  d/ B5 r1 f
8 |* a: o/ ?! m$ ^8 G8 M
# W3 s( G% z; h" g& ?' D$ A
图 24

+ {3 f& K0 y8 w7 ]6 `5 L4 l% B
  • 编译器链接脚本修改
    - ^8 h8 W& c- w9 A4 U: T+ s" |
双击打开编译器链接脚本linker.cmd,修改脚本内容。! E+ K2 _) M5 Q2 S5 F( C
( C' j5 z" Y2 a4 ^$ K, x

. l# P4 g, ?: t# y# ^

6 J+ _$ C, l1 c( X5 i
图 25

9 g* X* H  ~' n, @: ~
  • 在SECTIONS命令中新增一个.resource_table段,具体代码如下所示。
    5 a- v1 O1 l/ }
GROUP {
& |" x' H; `. j: p$ o /* This is the resource table used by linux to know where the IPC "VRINGs" are located */
( n  S. R$ T/ l/ \ .resource_table: {} palign(4096)8 l+ |# }- e; ]5 Z& S
} > DDR_0
$ |+ \4 j% ^7 X# _
; b4 Z$ e- g$ i9 p

7 |8 d  @2 k$ L+ \
6 t/ D  u7 x2 N- d: I" c
图 26

- G# w9 E6 w& c/ R; b
  • 在MEMORY命令中,设置.resource_table段的加载地址为0xA4100000,作为Cortex-M4F预留内存空间,具体代码如下所示。# Y. T  J: v- H* n& C  v. N& t  j  e
/* Resource table must be placed at the start of DDR_0 when M4 core is early booting with Linux */
6 }/ c( H( K/ Y1 ^ DDR_0 : ORIGIN = 0xA4100000 , LENGTH = 0x10007 d2 m8 u& \- x3 t* M/ u

$ o6 \% W/ d& K2 k1 ?& D2 r
" W4 ^6 o6 r, ^+ R
3 J% |5 g& m% d0 n; B  b7 y# d8 Q
图 27

8 r7 I, s- ]$ Q/ T
Cortex-R5F工程配置
; _( w8 m+ ^7 x' Q 本小节以Cortex-R5F核心的led_flash裸机工程为例进行演示。4 A0 H, c, m( U8 Q5 @; `. p
AM6412包含1个Cortex-R5F核心:r5fss0_0;AM6442包含4个Cortex-R5F核心分别为:r5fss0_0、r5fss0_1、r5fss1_0、r5fss1_1。不同的Cortex-R5F核心,编译器链接脚本指定的.resource_table段加载地址有所不同,具体如下表所示。9 f$ t; `" D+ L9 l/ n

- i" t* [0 \! A1 C) r. e" G
  F" a+ N. _7 E5 i

; b2 J! @6 A0 s
表 3

4 t/ ]+ q! }! j7 `4 u6 W0 z
led_flash_r5fss_nortos工程配置的Cortex-R5F核心为r5fss0_0,下面演示如何修改led_flash_r5fss_nortos工程配置,实现基于Linux引导启动r5fss0_0。6 O: e2 K2 s1 Q7 j4 _0 q
  • IPC配置. \3 L3 Y5 F( q% z6 Z7 T, k: `
在syscfg配置文件,添加IPC配置,具体配置如下图所示。! V3 ?3 w5 G! k$ M" [# w

( |0 }; y3 {) l' y2 u
  y2 A2 O! i) u  N& G

7 A; K" ]. X( Y7 a) l
图 28

$ G$ d& S; N6 l% E8 |
  • UART配置: @9 Y' f2 D$ _. S3 B( C
UART0为Cortex-A53核心(Linux系统)的调试串口。在led_flash_r5fss_nortos工程中已配置UART0作为调试串口,请在syscfg配置文件取消勾选"Enable UART Log"配置选项,或修改为Linux设备树中未使能的串口。6 C2 B+ |: q5 a1 s, N

% z$ `  _/ n+ T* k1 {

4 w" ^" b  V5 L5 n. @

& {: \* c. y* N0 }' p
图 29
* D+ o; P0 V4 L  ?
  • 编译器链接脚本修改9 m) o+ J  T' L7 C( D# U
双击打开编译器链接脚本linker.cmd,修改脚本内容。6 @" E! |5 U% A+ q9 @; M; O2 B$ j4 I

, _! f. m( K5 u8 L8 ^- `

- H# A& _0 u2 @- W
4 k: t  J( F+ n5 `  r4 T' s3 w
图 30
7 M$ \9 n5 P$ ?9 p" O9 r% B
修改内容如下:
- ]7 M6 e! T9 k
  • 启动代码链接至R5F_TCMA;
  • 新增一个.resource_table段;
  • 代码段、数据段、bss段、堆栈全部链接至DDR,在Linux上为r5fss0_0预留内存地址空间;0 R7 \9 Q7 z$ I
SECTIONS
2 k& V  e8 M0 V  t: \2 n# k {$ T) H  ?  E8 m4 W3 n
GROUP {2 Y5 W$ o( q- w! s  [1 r2 }
.text.hwi: palign(8)/ ]: G: _" v; l8 b
.text.cache: palign(8)( K5 F5 V% l) |; ^. o2 J
.text.mpu: palign(8)
7 p: k6 R3 u9 c- d9 g- m' P .text.boot: palign(8)# F8 s( {: o9 _7 G3 @1 S( n: {
.text:abort: palign(8) /* this helps in loading symbols when using XIP mode */
5 g4 @! K( c) |) M$ e) |- w$ h. r } > R5F_TCMA
2 ]/ f9 e- c! o* j" `+ Z; d GROUP {! u  f( P# C/ ~6 T6 `
.text: {} palign(8) /* This is where code resides */" [' j5 L4 b* n4 i
.rodata: {} palign(8) /* This is where const's go */
/ F7 }2 I6 e, f1 w2 g# U( h } > DDR_1
3 M( o3 z0 c  u8 u. C! _! e1 h6 ? GROUP {& E. B$ T8 \! ^7 D( h9 l' c
/* This is the resource table used by linux to know where the IPC "VRINGs" are located */; b/ E: \' \/ Y+ e8 D
.resource_table: {} palign(4096)9 l- C* u* ^" M
} > DDR_0, G# w' z8 ^9 @/ P4 g
GROUP {
/ J" e8 A4 T; j  F .data: {} palign(8) /* This is where initialized globals and static go */, q& g. Y( k) K/ W
} > DDR_1: w. g: }( J% \
GROUP {8 a2 m4 T" }! x4 b/ s3 V
.bss: {} palign(8) /* This is where uninitialized globals go */
* C0 v% B' S, n! z RUN_START(__BSS_START)8 d! t% E5 t: `+ ?3 _" u1 U
RUN_END(__BSS_END)
# v8 Y1 L# l4 X2 p, v; D/ g' S .sysmem: {} palign(8) /* This is where the malloc heap goes */' }( X- M  \- l
.stack: {} palign(8) /* This is where the main() stack goes */6 D$ U* |- e0 q5 }: a9 e& ?
} > DDR_1- g4 @4 V: v4 Q" p" b: ]: Q& Q
GROUP {4 r% @7 p! p2 L3 d: a# d
.irqstack: {. = . + __IRQ_STACK_SIZE;} align(8)
: D/ ~, m1 U6 g$ v( p( K" R0 ? RUN_START(__IRQ_STACK_START)
2 \# i- d; ^( G3 m* b9 Q+ f+ Z8 T RUN_END(__IRQ_STACK_END)+ C/ }- {' r- r! |* Z& S
.fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8)
3 r. ^9 a" p3 W% `0 e) d/ w  D3 i RUN_START(__FIQ_STACK_START)) r9 Y6 x0 t! Q0 G8 q( F- n
RUN_END(__FIQ_STACK_END)6 }0 l; {* O  a6 |2 o
.svcstack: {. = . + __SVC_STACK_SIZE;} align(8)3 @2 L1 @' l; H# e- h" @# X/ T
RUN_START(__SVC_STACK_START)- f5 r( o$ n$ a% {- t- t" B, G9 E3 a* {
RUN_END(__SVC_STACK_END)9 }; C: \: ?1 ], W/ A3 H
.abortstack: {. = . + __ABORT_STACK_SIZE;} align(8)
# q: ?# a7 Z/ E# s/ {, Z RUN_START(__ABORT_STACK_START)9 Y1 X$ A% j/ t' |0 Q2 i
RUN_END(__ABORT_STACK_END)
1 C2 _* n$ {4 W) b; i, p/ p( W .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8)2 c6 n/ n+ T9 K3 G) _9 Z
RUN_START(__UNDEFINED_STACK_START)7 \# P% _! r# I+ K7 e
RUN_END(__UNDEFINED_STACK_END)
( J$ b3 [( e9 X9 t- ^ } > DDR_1* W, ]' E1 h& q* d% l
/* Sections needed for C++ projects */
. D4 M/ n* D3 U: [4 z GROUP {4 ]8 M0 O, O/ U" L; a4 _- ~
.ARM.exidx: {} palign(8) /* Needed for C++ exception handling */
( @/ A. u: z# N0 R$ U: @ .init_array: {} palign(8) /* Contains function pointers called before main */
! D$ ?; @7 x! T4 U* \* I .fini_array: {} palign(8) /* Contains function pointers called after main */& A/ p5 C) Z1 x3 X2 }9 e
} > DDR_1: P! J) A+ n% m
/* Sections needed for C++ projects */. x5 D' ?( \, G7 ?$ J# K9 ~! M
GROUP {) @0 o, @" @, B5 U( B
.ARM.exidx: {} palign(8) /* Needed for C++ exception handling */+ Z# m; Y+ e- I$ E' G9 g
.init_array: {} palign(8) /* Contains function pointers called before main *// K8 e0 M1 I7 m, o8 {
.fini_array: {} palign(8) /* Contains function pointers called after main */$ Y$ u. y# ]: U( M/ H" G+ U
} > DDR_1
7 H6 {7 N! Y! x  ~ }
, _& o- I) `; p9 E$ P
4 j; e2 P$ ]$ D# Z/ H3 [- d) @& k# x
+ L) j7 ?% I* y, `# E. f3 ^; N
9 n. V' g$ \7 n* S* m! J
图 31
! s1 ?, E; j4 u9 s

, A' U( H, b' G! z( r
图 32
* f1 M  F+ _7 [
  • 设置.resource_table段的加载地址为0xA0100000,作为r5fss0_0核心预留内存空间;
  • 设置共享内存链接至Linux为共享内存预留的内存地址空间。  ]0 N# k8 ^* u
/* Resource table must be placed at the start of DDR_0 when R5 cores are early booting with Linux */
. c* M( [5 u& A1 ?, ]" e8 O6 ~8 G: m1 m DDR_0 : ORIGIN = 0xA0100000, LENGTH = 0x1000
6 `/ o1 ]% n$ ]4 S% f DDR_1 : ORIGIN = 0xA0101000 , LENGTH = 0xEFF000) B# k$ D/ g6 v( M
USER_SHM_MEM : ORIGIN = 0xA5000000, LENGTH = 0x807 X( a. \, F" L( Y6 q. b8 f5 v
LOG_SHM_MEM : ORIGIN = 0xA5000000 + 0x80, LENGTH = 0x00004000 - 0x80
6 o% r$ v# D- V3 y: I: b! t! m RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0xA5004000, LENGTH = 0x0000C0006 U0 @. F, K' J/ G3 |
) k. ?8 {, [& }, S
* b; m5 r( _  R3 m1 z

- ?4 A9 R" C4 s  `3 `
图 33
. }$ U3 N# v) B9 F

; P& K! w2 N3 I- G! ^
9 I! `- q+ X4 t6 C8 ~! `( p. x& l% j

该用户从未签到

2#
发表于 2024-7-24 18:14 | 只看该作者
配置的过程很详细,性能方面还的测试一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 15:04 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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