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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
                          前 言
0 }: Y8 H% z) v 本文主要介绍AM64x的Cortex-A53、Cortex-M4F和Cortex-R5F核心程序自启动使用说明。默认使用AM6442进行测试演示,AM6412测试步骤与之类似。
% _5 d5 h2 @3 C( _! Z) k$ j
: F. ^* q3 T) c3 ?/ {3 v2 n
0 c3 c: @2 M- l8 S1 o
本说明文档适用开发环境如下:; w$ x. {0 K5 \1 F

4 J# ~3 n  I! n/ J Windows开发环境:Windows 7 64bit、Windows 10 64bit
6 N$ ~! u- t! @" W 虚拟机:VMware15.5.5
& ?, c2 ~+ y$ g+ H( ^; U Linux开发环境:Ubuntu 18.04.4 64bit& T6 B: ]! `" b1 F7 W) n
Linux Processor SDK:ti-processor-sdk-linux-rt-am64xx-evm-08.01.00.39
0 `  W& ^4 V! K" U5 W U-Boot:U-Boot-2021.018 W% x0 _4 K: N
CCS版本:CCS11.2.0
& Y. `) U( X! F- Y$ J  ?% Y mcu+ SDK:mcu_plus_sdk_am64x_08_03_00_18. l0 D& L" N* E" c- O! s
SysConfig:sysconfig-1.12.1_2446
/ y/ M( i" o2 z0 s+ j5 q GCC AARCH64 Compiler:gcc-ARM-9.2-2019.12-mingw-w64-i686-aarch64-none-elf. d4 o! h. W: Q' ?8 _; o! ^3 b- N. X
本文测试板卡为创龙科技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和高低温测试验证,稳定可靠,可满足各种工业应用环境。! A5 M- [7 R3 f, H" c" h& P- e
% m0 L) X! M4 g( `7 V

, B7 z$ ]3 a- Q" e1 y" K7 G$ {4 Q, R

- T' E8 [# W8 C( K+ _
( c/ o8 a* @" T' t# q1 M9 D$ I( O5 a7 C' d
用户使用核心板进行二次开发时,仅需专注上层运用,降低了开发难度和时间成本,可快速进行产品方案评估与技术预研。
% c, i9 X; X3 ^3 E8 X$ \2 g& s( e+ W& |) y% ~% w

8 h; R5 q* L6 }- Y 基于SBL引导裸机、FreeRTOS程序启动
* m8 M% v9 y; o0 B7 N- x 程序启动流程说明$ B3 @: E* ]! ]
评估板上电后,固化在CPU内部的RBL将会先运行,RBL根据评估板BOOT SET从启动介质(如eMMC,Micro SD、SPI FLASH)读取SBL,然后通过SBL引导应用程序启动。
* W  z3 y% n$ X4 a6 ^, A 程序启动流程如下图所示。: o, L+ B+ k0 T4 O' {% [8 M1 x
7 G8 q8 H6 o, S& n9 U! I( s. a1 U% r
7 y, f$ |- R5 |/ T

  }6 u; T3 X1 d9 V) _# l4 a
图 1
目前官方提供的MCU+ SDK(版本为mcu_plus_sdk_am64x_08_03_00_18),SBL将会先读取应用程序至MSRAM,然后再进行解析。由于MSRAM空间有限,分配给SBL使用的内存空间仅512KByte,并且SBL运行需使用部分MSRAM空间。因此,为确保SBL引导应用程序正常启动,应用程序大小不能超过380KByte。8 ?& K; B* t4 O6 v6 I
& n7 X0 y$ c9 K
& ^6 D; e2 k* @% e
& [. A7 k: v! Y+ U1 z
图 2

  E# \! S! H, Z5 @- u! l9 P$ F; [6 F  W
+ ~1 j0 r" G: j
基于Micro SD卡启动
0 ^) B" Z  D( Y2 \1 J( Y 启动卡制作8 L  L1 C; u5 v. ]0 A
请准备一张FAT32格式的Micro SD卡,通过读卡器将Micro SD卡连接至PC机。
1 f: h3 V; I% L9 h, R, ] 双击产品资料“4-软件资料\Tools\Windows\”目录下PartManFree-Setup.exe分区管理软件,按默认安装即可。安装完成后,打开分区管理软件,将会自动识别到Micro SD卡分区,请右键选中该分区,点击"Set Active"设置为活跃分区,如下图所示。
; P, t6 I+ t9 q2 I7 J) Y2 u$ P; `$ _2 s7 k( u7 E3 O. T

  r/ p% m, p- y2 Q" r
% V8 I( E2 F. y7 |1 O2 ?' m
图 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,如下图所示。
: l+ Y0 N1 ]4 v 备注:sbl_sd.release.tiimage为官方提供的SBL镜像。
& {6 s+ }4 Y7 Z2 H9 E$ ?& j5 P5 G' O1 f' b' Z, B

1 Y( W/ X( L6 \4 O* [$ R4 K9 p5 V

/ ~; W& Z, L6 z- l+ n* y+ G
图 4

* {# c, F1 ~8 q& E- l# H; z- T
; j6 w' X- I0 w5 y
图 5
2 c  Y9 _* ]* U$ j- @: f( M, v5 R
单核启动 本小节以Cortex-A53核心的led_flash裸机工程为例进行演示,Cortex-M4F和Cortex-R5F核心操作步骤与之类似。
3 k. M8 q  P; J& j 请参考《FreeRTOS、Baremetal案例开发手册》文档,正确编译产品资料“4-软件资料\Demo\Baremetal-demos\led_flash\project\”目录下的led_flash_a53ss_nortos工程,然后将编译生成的led_flash_a53ss_nortos.appimage镜像文件拷贝至Micro SD卡,并重命名为app。7 g, j# Z0 k' H& w

& [4 @# p$ u( Y/ y$ |5 R
0 I3 R) B- M3 b9 y* c
. X/ j1 R. E7 I
图 6

/ M4 ~% c4 Y4 |0 p

* u0 I% I: }: L3 b) G
图 7

: z& b# I4 G: y" k. k8 v
请将Micro SD卡插入评估板Micro SD卡槽,根据评估底板丝印将启动方式选择拨码开关拨为101000(1~6),此档位为Micro SD启动模式。然后使用Micro USB线连接评估板的USB TO UART0调试串口至PC机,
- @! K2 J  v# Q& D  Q: ^ 请将评估板上电启动,串口调试终端将会打印如下类似启动信息。同时,可观察到评估底板LED1、LED2闪烁,说明程序自启动成功。9 @( s8 N- m8 I' `& x* n. u9 J

9 O4 \$ \5 f- c5 V+ V

8 z. Y7 q& I) K7 u1 |- }: W

; ^; y" d4 [6 X- w- m
图 8
2 i- l0 v  W2 h+ e
多核启动 本小节以Cortex-A53、Cortex-M4F和Cortex-R5F核心的led_flash裸机工程为例进行演示。
: q1 n' `6 k; S 请在磁盘根目录新建一个非中文文件夹test,将产品资料“4-软件资料\Demo\Baremetal-demos\led_flash\bin\”目录下的led_flash_a53ss_nortos.out、led_flash_m4fss_nortos.out、led_flash_r5fss_nortos.out全部拷贝至该目录下。% {& A) K0 f! a# N$ ]$ C9 k0 [; ~

9 V% ~3 u8 m9 N% ?; D2 j6 F! ]
图 9
2 f8 y& j; N1 E1 q
右键Windows按钮,点击"Windows PowerShell(I)",打开Windows PowerShell终端。
& d( J7 K7 e3 L! _# X! I+ r0 I8 p% N3 ]9 b3 F
# [' ~& u. d8 ^
1 }2 I/ R0 R, g+ B2 S) v
图 10
, h! k: L9 f0 M0 w+ }
在Windows PowerShell终端执行如下命令进入test目录。
) w2 ~- y9 ~( ?0 I! D  b" G Window# cd E:\test\
1 m: Y5 \4 h8 a: {7 \1 _/ t; I1 D# k$ ~& j+ |8 V1 |% y

, ?) f* A0 |* X$ L2 ^7 Q
  J* q  C* G# v* d/ \
图 11

/ F$ V' e, J2 k' [
  • rprc文件生成
    . I) }, J9 M, R7 }: \' O$ e# O  L
在Windows PowerShell终端执行如下命令,基于xxx.out文件使用CCS和MCU+ SDK生成xxx.rprc文件,xxx.rprc文件已包含可加载段的bin文件。CCS与MCU+ SDK路径请以实际情况为准。7 c# j1 g# ]  ^
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
: ~( w4 k# `5 h7 ?$ L! c$ V 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.out3 @/ A* M6 D8 t% ^. j1 v
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
- n' G6 q" h. q7 _, j" Y* S- F  [4 Z

+ ]+ r6 H. s. W* J4 _
+ b6 W5 U8 ?6 E* O3 o0 B+ x
图 12

( U0 a, d* L5 c5 Y# O- ^
执行完成后,将会在当前目录下生成了led_flash_a53ss_nortos.rprc、led_flash_m4fss_nortos.rprc、led_flash_r5fss_nortos.rprc文件。& m! n+ i, M! h, F6 P2 V: u
! v( D) A5 a) l3 @% N2 v, T. Y
, I0 V% X2 s% y; g" a

3 r$ e# N0 I" @
图 13

2 ^$ I! A* Q  h
  • appimage文件生成
    / E- V6 L4 v7 {; O2 y3 R2 i! J
基于xxx.rprc文件生成镜像xxx.appimage,需指定启动核心的ID,对应关系如下表所示。
' W9 [; U* a9 I% f/ `) @9 S 备注:AM6412包含1个Cortex-R5F核心:r5fss0_0;AM6442包含4个Cortex-R5F核心分别为:r5fss0_0、r5fss0_1、r5fss1_0、r5fss1_1。; k2 W+ n1 B0 e( w

, W7 I* ~2 |4 e; X

) ^" ~9 p- w' y2 y' ^. n
% K7 G1 T! A- j/ t* A! r7 Z" B
表 1
9 I/ t! ~& x- D
在Windows PowerShell终端执行如下命令,将Cortex-A53、Cortex-M4F和Cortex-R5F核心的led_flash可执行程序合并为led_flash.appimage,并指定运行核心分别为a53ss0_0、m4fss0_0、r5fss0_0。, b" ]6 }; L5 L7 h1 H
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  t8 ~+ c5 \& e5 T" W/ r

8 d0 L0 v, I6 E: Z

; j! U+ o/ u5 W
图 14

0 f1 H* a6 ?1 d7 T( U6 k
执行完成后,将会在当前目录下生成led_flash.appimage镜像文件。  ]! U  X' ~% O& F$ `+ t' O/ w

: h" f- C4 Y7 K: h
8 D( O, T- @2 Y& Z0 t9 F, H

& E- k' D# p; v7 V( W1 ]2 P. u, w+ w
图 15
3 _5 \/ P" v  P, y
请将生成的led_flash.appimage镜像文件拷贝至Micro SD卡,并重命名为app。! B' I) a1 _/ M

) l. x1 j0 j& }" g7 S8 u- z. L
2 C2 {: \, h+ k+ u
( U! d' k% l2 n8 ]
图 16
1 m+ h9 J7 T; q: E6 L6 [
请将Micro SD卡插入评估板Micro SD卡槽,根据评估底板丝印将启动方式选择拨码开关拨为101000(1~6),此档位为Micro SD启动模式。然后使用Micro USB线连接评估板的USB TO UART0调试串口至PC机。, }5 ]' Y; U& ^$ J  ?
评估板上电启动,串口调试终端将会打印如下类似启动信息。同时,可观察到评估底板LED1、LED2、LED3闪烁,说明程序自启动成功。
  X, k; W/ ?. q+ c7 W& _7 I% J( B  S$ i

+ n" J. f% h, J$ n( x( ~

8 L& m0 t) o" d# k
图 17

3 e- T7 W" P) C6 k% B! W4 {
基于Linux引导裸机、FreeRTOS程序启动
, l9 r; `$ ]( v: i 基于Linux启动" m0 z9 Q' T7 d  c0 Q* R1 r
本小节以产品资料“4-软件资料\Demo\RTOS-demos\”目录下的ipc_rpmsg_echo_linux案例为例进行演示。该案例主要实现Cortex-A53与Cortex-R5F核间通信,以及Cortex-A53与Cortex-M4F核间通信。+ @; }. }* I& M' `+ F# o
请将案例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镜像文件拷贝至评估板文件系统根目录下。! L* F$ u1 i2 |% T3 ?
7 b! C+ T8 w; z4 y
. s  d" E3 _8 H& @7 m( i1 L6 d

/ i! G9 R" p/ b! j  l
图 18
$ p4 E5 G$ U7 K' W* M; N
进入评估板文件系统,执行如下命令,删除原来的软链接。- R; p' E" I5 f) e
Target# rm /lib/firmware/am64-main-r5f0_0-fw/ ~! S9 V  a5 q9 k" J+ F
Target# rm /lib/firmware/am64-main-r5f0_1-fw* ^9 e/ M; y+ V) q
Target# rm /lib/firmware/am64-main-r5f1_0-fw4 ?0 e+ h0 a4 P; x% c  `' Y$ J; V: [  R
Target# rm /lib/firmware/am64-main-r5f1_1-fw  u2 H+ b. t4 {1 K  `; [2 `9 K
Target# rm /lib/firmware/am64-mcu-m4f0_0-fw0 g* q- o: K- U9 {% p0 W6 h
7 _1 w8 {) ?" @8 T+ U! v' u. p

. K* F, d/ `* v( y. d

: z: Y3 A0 M7 J* C. y1 z5 F0 I
图 19
& q9 L7 i; |6 |" ~
执行如下命令,创建新的软链接。: H. D" r8 z. O  `% s# J
Target# ln -sf /home/root/am64-main-r5f0_0-fw /lib/firmware/am64-main-r5f0_0-fw
3 [6 A+ f+ v5 ~: R- Z7 n7 ^. G4 l Target# ln -sf /home/root/am64-main-r5f0_1-fw /lib/firmware/am64-main-r5f0_1-fw; r$ a0 o3 L  p3 N7 a1 }
Target# ln -sf /home/root/am64-main-r5f1_0-fw /lib/firmware/am64-main-r5f1_0-fw4 c0 V' w. e/ u$ a( H
Target# ln -sf /home/root/am64-main-r5f1_1-fw /lib/firmware/am64-main-r5f1_1-fw. [" m7 c6 o, K" F! @6 h+ m. \" p
Target# ln -sf /home/root/am64-mcu-m4f0_0-fw /lib/firmware/am64-mcu-m4f0_0-fw6 Q3 c6 c/ t! V8 K

% L5 p5 N  g, H9 V
4 b# Q# ^. o/ ^6 u
  ~. L# p& M3 h: O. ~* J
图 20

6 t% _% r! c$ x9 A( t2 @
请将评估板重启,在系统启动过程中,Cortex-R5F、Cortex-M4F核心将会引导启动。在评估板文件系统执行如下命令,查询Cortex-R5F、Cortex-M4F核心与remoteproc关系。
$ o7 {+ h4 k0 \7 v! f- v& A# G! f0 A Target# head /sys/class/remoteproc/remoteproc*/name
- r5 S: M$ {  p/ w$ K: F/ z0 s* Z$ b# z- E5 `- r

" Q3 D. L; Q- o+ ?- A
3 z1 c- U  [& {3 H9 V
图 21
& {. q/ o( ]3 j4 U9 B9 l# A. {; d

/ t- L  H: H* H# A. ?, W# G4 [- P
表 2
  p1 c# J" E: b) A
备注:核心与remoteproc对应关系,请以实际情况为准。
4 r  {7 }. s# p/ A0 F# _0 f 执行如下命令,可查看Cortex-M4F、Cortex-R5F核心程序运行日志。* a0 L' y0 |. u. l5 F
Target# cat /sys/kernel/debug/remoteproc/remoteproc0/trace0
# o. W0 u% J4 q/ T& a0 U2 E Target# cat /sys/kernel/debug/remoteproc/remoteproc1/trace0% g4 P# \5 W+ C3 Y2 d
Target# cat /sys/kernel/debug/remoteproc/remoteproc2/trace0
4 A% ?7 R4 P6 n& d Target# cat /sys/kernel/debug/remoteproc/remoteproc3/trace0
8 p% @8 f; Q0 L. D* d( t6 B) j Target# cat /sys/kernel/debug/remoteproc/remoteproc4/trace0
  ^3 s- x& C( ~) B3 U6 h; `/ p
7 C- f( p3 J" r8 j( l5 H. q
' Y! N/ w3 e+ m$ ^  e
5 V8 P1 j3 H# L' ~1 I1 _- t; t
图 22
5 X7 y% h7 W. e3 V
工程配置说明) Y" [! m: A4 f
本小节主要演示如何在Cortex-R5F、Cortex-M4F核心的Baremetal(裸机)工程与FreeRTOS工程中添加Linux引导配置。& ?( X! a3 m5 Q; N! _

9 Q$ K1 n" Q0 K! B

2 ?9 }3 O9 F) u6 ^ 内存空间说明
0 ^! y" G: C& L9 G1 Q" S 如Cortex-R5F、Cortex-M4F核心的工程需支持基于Linux启动,则需进行内存空间分配,在Linux设备树中已指定内存空间,预留给Cortex-R5F、Cortex-M4F核心使用。内存空间分配如下图所示。0 K9 O  M! E! L
3 a" _+ n0 v4 u

" s) t* W5 H8 W7 K

, \) R, [- q) |) @4 o8 ?8 x4 [
图 23
: }" q  ?% P+ [3 p8 o' K7 A
Cortex-M4F工程配置" ?7 K4 ?) Q3 D+ r! ~- G: `
本小节以Cortex-M4F核心的led_flash裸机工程为例进行演示。4 i: g+ H6 v# S2 [9 p/ T( _, G' m
  • IPC配置1 h! g8 V: X- Y+ E1 \
在syscfg配置文件,添加IPC配置,具体配置如下图所示。
/ S3 D, n6 y  h3 l/ I
; X" ]; `  J4 N- s+ n# h* o. T
6 \3 h# B! Z! j; D/ q
8 ~& m- X% G9 w, M
图 24

' v9 x) ^# |/ E# H  X
  • 编译器链接脚本修改
    ' {. Y0 b. ?, w) y
双击打开编译器链接脚本linker.cmd,修改脚本内容。! X# q! t; Z" Y2 u/ }4 N' v; k
# y) f. @, P- d$ F8 \" ?$ s
1 ~; }' K; i2 r7 s! z! @

# e* h) R0 H0 J3 m
图 25

6 ^/ O& b  n- {0 x6 ~* D: w% W
  • 在SECTIONS命令中新增一个.resource_table段,具体代码如下所示。: d& j! I7 E" g; q! Y$ |  I3 Z0 e
GROUP {7 a- l% L2 a8 \
/* This is the resource table used by linux to know where the IPC "VRINGs" are located */
. J6 l: \( P- |* D! n! |: l3 g .resource_table: {} palign(4096)( V* x  }+ Q% |4 S
} > DDR_0. @$ C0 P0 k8 u
& H' t1 ?3 D) o( c
% D9 |$ D: X) }1 Y* ]& v
. X( Y! F# b. X: O  [
图 26
+ l- S* v$ c# O! Q$ ]
  • 在MEMORY命令中,设置.resource_table段的加载地址为0xA4100000,作为Cortex-M4F预留内存空间,具体代码如下所示。
    : z8 \% C2 L9 G; A! }
/* Resource table must be placed at the start of DDR_0 when M4 core is early booting with Linux */8 L9 }6 c7 r0 i- i6 d
DDR_0 : ORIGIN = 0xA4100000 , LENGTH = 0x1000
5 r* L5 v% v+ |: o* ]2 m1 U" w+ l) }* n% ~

" y. \$ T4 ]' e0 O+ b2 u, ~

/ o4 ]% m3 {8 v5 I
图 27

$ L5 _$ K" a, Q
Cortex-R5F工程配置/ C  z* d& i3 g, D
本小节以Cortex-R5F核心的led_flash裸机工程为例进行演示。
( j1 r# m: o% F AM6412包含1个Cortex-R5F核心:r5fss0_0;AM6442包含4个Cortex-R5F核心分别为:r5fss0_0、r5fss0_1、r5fss1_0、r5fss1_1。不同的Cortex-R5F核心,编译器链接脚本指定的.resource_table段加载地址有所不同,具体如下表所示。* T& P) o6 X7 ~' I7 I

% `2 S$ r+ Y6 u

6 i* n- Z9 s3 a0 r' `

* b& w6 b& t. M6 K! c; V* z3 v, m
表 3

9 j) y# y0 \$ i3 i. m2 @8 x6 L; \
led_flash_r5fss_nortos工程配置的Cortex-R5F核心为r5fss0_0,下面演示如何修改led_flash_r5fss_nortos工程配置,实现基于Linux引导启动r5fss0_0。
7 H6 d& z6 t; v. v& s
  • IPC配置
    , T2 [; a5 N2 d+ f( ~
在syscfg配置文件,添加IPC配置,具体配置如下图所示。3 y* ~9 j; }5 q% Z$ _

4 i$ _1 U" Z6 ]1 d0 ?7 _

: V* ]6 H0 ]- ^# Y& k9 H+ ~
- W; @  c1 u; R
图 28

" y+ C  U" Z5 z
  • UART配置
    ' A$ u& A& S$ a9 e5 |7 s
UART0为Cortex-A53核心(Linux系统)的调试串口。在led_flash_r5fss_nortos工程中已配置UART0作为调试串口,请在syscfg配置文件取消勾选"Enable UART Log"配置选项,或修改为Linux设备树中未使能的串口。' o/ M, n5 a- f1 |% D' p: M

2 f' |' x: x- h/ k
8 s, k* }- i  C

: s& j- V  Y' }2 [" Q2 l
图 29

9 n( L. k2 g$ T; r* ?
  • 编译器链接脚本修改
    . Z/ D3 |/ |- m/ _' j4 D/ U* P) I/ x! y
双击打开编译器链接脚本linker.cmd,修改脚本内容。
0 i$ H! c) k, V; H6 v: v$ X
8 |# l% N# E) h* R& _/ E

5 v4 R! ]5 ^2 u/ Z9 J0 X
0 r0 U% p& O' b8 M' @4 G
图 30
+ U* O# r; C4 f
修改内容如下:  o+ g% W8 A$ _" z6 z
  • 启动代码链接至R5F_TCMA;
  • 新增一个.resource_table段;
  • 代码段、数据段、bss段、堆栈全部链接至DDR,在Linux上为r5fss0_0预留内存地址空间;
    , Y  @3 i: T) ?6 `# W
SECTIONS
; ?9 ], r& k  ?' |  `$ |" i {8 R/ I0 ~8 D6 A0 L! R  S8 d$ ?
GROUP {
: ?3 Y  R/ m3 K% H1 \; A .text.hwi: palign(8)
( w2 j. m4 p9 d* m/ A8 Y8 U .text.cache: palign(8)
/ }, R' Q9 W) f .text.mpu: palign(8)
% n) @4 }  M6 c! X& R! G. ? .text.boot: palign(8)( H. [% g$ Q6 Q/ _4 M: G
.text:abort: palign(8) /* this helps in loading symbols when using XIP mode */! A' c  D! K& S2 U7 K
} > R5F_TCMA: y5 w0 e9 r) @' k0 z1 |
GROUP {
$ n3 y9 T: E' m5 l; D' ?3 s .text: {} palign(8) /* This is where code resides */( ~; S) k8 T! C9 K5 p/ j
.rodata: {} palign(8) /* This is where const's go */! I% l* N' M, y! K
} > DDR_1- B; \+ E; S* q* W. P
GROUP {
3 I- L: m, {9 L! [ /* This is the resource table used by linux to know where the IPC "VRINGs" are located */
: f: R) B/ v& @( r! | .resource_table: {} palign(4096)+ M' V; j. L+ `! v6 J1 d
} > DDR_0
; c# D. t1 I! z3 a. K7 _9 u GROUP {
, t8 k/ a" ]' \ .data: {} palign(8) /* This is where initialized globals and static go */
+ S- [7 o/ n6 }  ~6 h; g$ ]0 S } > DDR_1
1 C; o5 N8 K9 U( w( O GROUP {
( Q5 L( r% i( C' S" Y8 p .bss: {} palign(8) /* This is where uninitialized globals go */
& X2 o$ F5 `  g RUN_START(__BSS_START)
* Q/ p$ y8 p* z* L! T3 `' |5 ~ RUN_END(__BSS_END), F* B% c2 m& T; m/ l
.sysmem: {} palign(8) /* This is where the malloc heap goes */
: j. P: d5 z- [9 j& j .stack: {} palign(8) /* This is where the main() stack goes */
' @  y6 p! D) l } > DDR_1% ^, s0 G8 j- M
GROUP {+ ?' s! i  b, R3 [; L5 Z
.irqstack: {. = . + __IRQ_STACK_SIZE;} align(8)# y5 H& r! ?% e0 l6 G% M& Z
RUN_START(__IRQ_STACK_START)5 O4 J- m/ g) ~; S
RUN_END(__IRQ_STACK_END)
2 F) l0 M0 ]- h% b .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8)
% i0 l: u, I4 i RUN_START(__FIQ_STACK_START)! ]. S4 U+ r: |  p" O
RUN_END(__FIQ_STACK_END)9 v7 a2 y4 Q3 K" E6 f0 C
.svcstack: {. = . + __SVC_STACK_SIZE;} align(8). f$ T) n. K& x) Y6 v3 u
RUN_START(__SVC_STACK_START)
9 D6 B) p# ^; X RUN_END(__SVC_STACK_END)! w# U+ u1 D2 F' j. [, r
.abortstack: {. = . + __ABORT_STACK_SIZE;} align(8)' ~" m  K: _  j+ A  J+ w. c9 C
RUN_START(__ABORT_STACK_START). N: U; n& v- d+ L! q+ e
RUN_END(__ABORT_STACK_END)
0 z' ^( U" h- n9 h .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8); j& a7 L" U! I' O& a7 m2 B
RUN_START(__UNDEFINED_STACK_START)
9 G# |% D' f) F- Y3 u RUN_END(__UNDEFINED_STACK_END)
+ @  U5 e& R* G! { } > DDR_1
; E0 J  k2 f, Y9 a /* Sections needed for C++ projects */
. O* v# K+ V# i0 k  s( \ GROUP {
3 ~  Y( ~3 Q9 g6 O; E# [/ I" c4 ~ .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */1 p' n' q, }' T4 @. l5 G! D% w2 |* U% T
.init_array: {} palign(8) /* Contains function pointers called before main */- U7 G4 G/ H( V, d) L. D0 b
.fini_array: {} palign(8) /* Contains function pointers called after main */9 T. r( K* D. O$ U! q9 {4 P+ M" P
} > DDR_13 T/ H& Y1 s: _) J* n
/* Sections needed for C++ projects */7 O; i% W! o  i4 p+ z2 j
GROUP {# w) T4 U& E( J, X6 _
.ARM.exidx: {} palign(8) /* Needed for C++ exception handling */$ q7 S+ p9 F, }
.init_array: {} palign(8) /* Contains function pointers called before main */
* J. a$ h9 I" K* C .fini_array: {} palign(8) /* Contains function pointers called after main */
+ E/ N' D; M3 H$ V7 n: \ } > DDR_1
8 @/ Q; J* n" G5 @" N7 C }
! w4 R! P3 F  e  A& l( M- c* ?3 b3 q$ d" l( ?
; V; j4 ?5 j. V+ j2 e
  _9 |/ U5 s  Q, p& a, N
图 31
4 L  g* v6 R, P* p  D
$ Q! `2 v  f" E2 L: J' }
图 32

+ j5 w) D: I) M
  • 设置.resource_table段的加载地址为0xA0100000,作为r5fss0_0核心预留内存空间;
  • 设置共享内存链接至Linux为共享内存预留的内存地址空间。
    . E  D4 d! p7 H) C8 C
/* Resource table must be placed at the start of DDR_0 when R5 cores are early booting with Linux */' g7 [% m9 Z9 S/ t% b
DDR_0 : ORIGIN = 0xA0100000, LENGTH = 0x1000
5 S' P) f, p; O DDR_1 : ORIGIN = 0xA0101000 , LENGTH = 0xEFF000
) h- o+ r" a1 e  q# b( z1 t/ S USER_SHM_MEM : ORIGIN = 0xA5000000, LENGTH = 0x80' l* M9 _  M; V* K
LOG_SHM_MEM : ORIGIN = 0xA5000000 + 0x80, LENGTH = 0x00004000 - 0x80( e8 a  |: ?" f. E
RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0xA5004000, LENGTH = 0x0000C000
7 g% f. G, K/ x* m6 t2 I+ n3 I/ T7 `! o/ e& o7 K) O' q' ?7 u" A  N

3 E. A1 x, L2 m3 I6 Q% A1 u
! Y/ f+ z8 K. K6 ~0 D& |
图 33

9 |  U3 d8 n! A3 }- A

" s& k$ y$ _7 V4 t! y
' P; n8 S) _  }- F! d0 [  C) [' g3 ^* c: Q( p4 x" I5 O) `7 W

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 18:47 , Processed in 0.218750 second(s), 24 queries , Gzip On.

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

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

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