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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
                          前 言8 }; B! `: E4 R4 K9 p& d, r8 H
本文主要介绍AM64x的Cortex-A53、Cortex-M4F和Cortex-R5F核心程序自启动使用说明。默认使用AM6442进行测试演示,AM6412测试步骤与之类似。
9 C! {7 n. Q* t% w' W" Q; {- S" U/ _9 a: v
) s& U/ g% }' d; H3 T7 ]8 C( e/ G
本说明文档适用开发环境如下:) p7 u. n" z$ C

6 V* d, z3 H. c2 _0 N+ M Windows开发环境:Windows 7 64bit、Windows 10 64bit
1 A6 x/ P0 X6 b. X. T 虚拟机:VMware15.5.5
& T, V% k/ E! E- k" i Linux开发环境:Ubuntu 18.04.4 64bit
1 ^1 |4 a/ h0 |$ l/ _% [ Linux Processor SDK:ti-processor-sdk-linux-rt-am64xx-evm-08.01.00.398 U9 W2 G- l( p- f9 ]2 M) P) }
U-Boot:U-Boot-2021.01
$ t& \' L0 G) U- [; \% O CCS版本:CCS11.2.0
5 j$ x  C& X/ O, m1 B7 k  R mcu+ SDK:mcu_plus_sdk_am64x_08_03_00_18
+ T/ G& N- J7 K# T; |7 ~+ f SysConfig:sysconfig-1.12.1_24466 c7 n; _* X. G0 [
GCC AARCH64 Compiler:gcc-ARM-9.2-2019.12-mingw-w64-i686-aarch64-none-elf  {1 b; G9 u, F) z+ c; B
本文测试板卡为创龙科技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和高低温测试验证,稳定可靠,可满足各种工业应用环境。
% L  n( o  x! W  e8 E' a
  L* `* a$ m7 e) U
5 d- c3 O* f' O$ g! ^: d
7 L. q6 ~. r4 a
5 p7 R4 K- N6 p
用户使用核心板进行二次开发时,仅需专注上层运用,降低了开发难度和时间成本,可快速进行产品方案评估与技术预研。
  M. ]# T; Q( F6 k9 b6 \+ {4 U# E( v- X9 h' X5 S

. _2 J2 `/ s- d* `/ X/ S 基于SBL引导裸机、FreeRTOS程序启动
! _; E$ K* u% C6 Q8 } 程序启动流程说明
8 @- H( |. u; S  H 评估板上电后,固化在CPU内部的RBL将会先运行,RBL根据评估板BOOT SET从启动介质(如eMMC,Micro SD、SPI FLASH)读取SBL,然后通过SBL引导应用程序启动。
0 l( P6 g+ @- ?7 { 程序启动流程如下图所示。
' o6 i9 N* }* L3 C
5 }4 r0 u. q1 n0 S
: z% ?0 }8 v$ t! ?5 z2 z
9 w5 F' ?4 h: y
图 1
目前官方提供的MCU+ SDK(版本为mcu_plus_sdk_am64x_08_03_00_18),SBL将会先读取应用程序至MSRAM,然后再进行解析。由于MSRAM空间有限,分配给SBL使用的内存空间仅512KByte,并且SBL运行需使用部分MSRAM空间。因此,为确保SBL引导应用程序正常启动,应用程序大小不能超过380KByte。
9 ^: q( E4 @- |3 c+ J. q) n. K. `& r* |2 y
2 E1 S% I0 C/ |
6 ^6 ~1 B, M. h9 x# S
图 2
: n& i9 t* x- n1 t0 S# d! i

8 ^9 X/ s; Y! G5 s' b
基于Micro SD卡启动
3 u, h% D" p* C0 { 启动卡制作
2 U5 z* f) |4 }% B 请准备一张FAT32格式的Micro SD卡,通过读卡器将Micro SD卡连接至PC机。
/ v4 ^+ _# ^6 k( P3 R 双击产品资料“4-软件资料\Tools\Windows\”目录下PartManFree-Setup.exe分区管理软件,按默认安装即可。安装完成后,打开分区管理软件,将会自动识别到Micro SD卡分区,请右键选中该分区,点击"Set Active"设置为活跃分区,如下图所示。
# B* q0 E2 k2 @& ]5 R3 ~
" J2 @, E" O( S. y$ ?1 ?9 _; ^1 S  Y) _

. U/ J% @% Q# s* ]* Z7 x( E

5 z* C0 j- @2 m6 O0 N6 }7 f/ b
图 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,如下图所示。
! w$ [0 J- E4 a 备注:sbl_sd.release.tiimage为官方提供的SBL镜像。
) i8 O. R( n0 g4 X
+ S, C. l$ k& _. ~5 q0 u; Z

& C" a5 ^6 F7 ^- ^% g6 z

3 Z" \- w+ W, n+ R
图 4

9 v( b3 w$ l, g9 _. f

/ {/ P3 u2 m4 O3 d, j  X, v
图 5

- F8 k7 C/ E2 z. ?- i
单核启动 本小节以Cortex-A53核心的led_flash裸机工程为例进行演示,Cortex-M4F和Cortex-R5F核心操作步骤与之类似。5 T" T4 n# t9 r# I8 [: q& G
请参考《FreeRTOS、Baremetal案例开发手册》文档,正确编译产品资料“4-软件资料\Demo\Baremetal-demos\led_flash\project\”目录下的led_flash_a53ss_nortos工程,然后将编译生成的led_flash_a53ss_nortos.appimage镜像文件拷贝至Micro SD卡,并重命名为app。
) M; l: i% Q5 H' L6 r9 f# X$ a" X( F

; J* H; K1 P: f& j6 h5 w
2 L1 _4 S& f5 M' r" S# c
图 6
; s) p: r3 p! t( v$ w# ~) o8 A

) L5 Z9 B5 H  S4 ]( A
图 7
# \7 q8 C5 c9 x& B& k' A1 ^
请将Micro SD卡插入评估板Micro SD卡槽,根据评估底板丝印将启动方式选择拨码开关拨为101000(1~6),此档位为Micro SD启动模式。然后使用Micro USB线连接评估板的USB TO UART0调试串口至PC机,! A  J# d5 e* z$ c9 w; P. N
请将评估板上电启动,串口调试终端将会打印如下类似启动信息。同时,可观察到评估底板LED1、LED2闪烁,说明程序自启动成功。
# w# g! m* j( H( @/ D* f! N% P* I# F2 d4 ~* [/ c: g$ \: F
! E# V. o% Q) j* L9 A" }

5 o3 `+ M- `6 o" Q2 w0 ?
图 8

0 A! y# h3 _0 f# m% }+ Z% C' W. I
多核启动 本小节以Cortex-A53、Cortex-M4F和Cortex-R5F核心的led_flash裸机工程为例进行演示。6 w: @- e* E; }) H0 q
请在磁盘根目录新建一个非中文文件夹test,将产品资料“4-软件资料\Demo\Baremetal-demos\led_flash\bin\”目录下的led_flash_a53ss_nortos.out、led_flash_m4fss_nortos.out、led_flash_r5fss_nortos.out全部拷贝至该目录下。2 s) C9 Z8 {3 ?3 q* H0 u6 ^

2 B4 z; f, Y  w
图 9
& ~  N7 f' F& [, E, O" l  i
右键Windows按钮,点击"Windows PowerShell(I)",打开Windows PowerShell终端。  t+ p: I% r9 @% s, f

7 M5 W& [5 A' T( \. z: S( O0 f

0 w! F5 P. e9 C# s. w7 H) |
) ?4 k+ M' v, p1 D. A2 \& J
图 10

6 {( x. S* `4 P9 m
在Windows PowerShell终端执行如下命令进入test目录。# \% ]8 Q6 K1 t1 ~) b
Window# cd E:\test\
3 @6 x1 R2 [! {: T/ e7 X& r. q, F% q3 X! [7 W2 V

0 c& v. L4 C! ^6 b2 Z7 o
& ~' m7 g( y$ P/ O* _7 c, c
图 11

8 B3 W' w1 b) B; W/ [# A5 j
  • rprc文件生成
    0 d* d7 O; H9 V) K+ M& O5 e/ U
在Windows PowerShell终端执行如下命令,基于xxx.out文件使用CCS和MCU+ SDK生成xxx.rprc文件,xxx.rprc文件已包含可加载段的bin文件。CCS与MCU+ SDK路径请以实际情况为准。
4 [* A. j$ h4 i5 | 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
+ w. F; x, s# ^0 k  h+ 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_m4fss_nortos.out
2 Z/ o9 m. f0 _ 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
( k$ S1 ^! t9 Y( M6 y3 S: m" r8 ^5 w
; s2 B$ C, W. p  O; ~

6 f$ H" V1 n( S. E$ O' `

" ~  x3 p9 O5 ]
图 12
, I5 C+ C$ B4 X8 Z
执行完成后,将会在当前目录下生成了led_flash_a53ss_nortos.rprc、led_flash_m4fss_nortos.rprc、led_flash_r5fss_nortos.rprc文件。* O/ j8 O. N& ]

. O- C" i6 {6 C7 b& J8 a

* |% Q8 h1 s  w: j4 K: `# p

! B5 m8 V# D% U4 t
图 13

/ ?" ^4 p" E1 w1 n* }
  • appimage文件生成
    ! T7 b+ m. A& \6 r8 V: M( n
基于xxx.rprc文件生成镜像xxx.appimage,需指定启动核心的ID,对应关系如下表所示。7 _# f* a4 G6 x) ]1 [! R
备注:AM6412包含1个Cortex-R5F核心:r5fss0_0;AM6442包含4个Cortex-R5F核心分别为:r5fss0_0、r5fss0_1、r5fss1_0、r5fss1_1。
9 f: D3 Y/ \, j* T! m' x  I, a& |! D1 G* T% `- N

/ @5 M7 h0 W! |3 d# Z2 d0 q

  A3 g3 C: z2 T2 x8 K* _
表 1

2 A" {$ C3 T) T$ ?7 I, f
在Windows PowerShell终端执行如下命令,将Cortex-A53、Cortex-M4F和Cortex-R5F核心的led_flash可执行程序合并为led_flash.appimage,并指定运行核心分别为a53ss0_0、m4fss0_0、r5fss0_0。
, w  `& J) h' _0 I  U: b' N8 j 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: b: T1 B2 ~1 F6 `( x

$ t3 ]3 ]7 o% K& v1 v2 ^
9 h! N. Z6 s- [
图 14
/ t2 ^# A4 y+ i& u+ m
执行完成后,将会在当前目录下生成led_flash.appimage镜像文件。
9 u/ a& ?" O& M  D% S  U) f0 J  S9 O
% F4 [7 j4 B8 R  M- @- j- c, z3 V
' `5 L; k4 a, b: E* f1 a& ?3 X
图 15
9 s$ B% J4 f3 E# Y3 y( V
请将生成的led_flash.appimage镜像文件拷贝至Micro SD卡,并重命名为app。
& [! C* W6 P- I) D
/ Q$ f" b5 Z, J% U
& U$ B' K5 j8 B2 G) D; G7 b
: s& ?6 C$ K- f  L0 j! \
图 16

0 }9 w* o8 ~, f2 ]
请将Micro SD卡插入评估板Micro SD卡槽,根据评估底板丝印将启动方式选择拨码开关拨为101000(1~6),此档位为Micro SD启动模式。然后使用Micro USB线连接评估板的USB TO UART0调试串口至PC机。5 R$ @! W4 Y: }6 f
评估板上电启动,串口调试终端将会打印如下类似启动信息。同时,可观察到评估底板LED1、LED2、LED3闪烁,说明程序自启动成功。
; x( q" D9 z( b% o2 |( J- k, U  F
6 \/ l" E$ S. w& r, ?( N8 S
/ P& U: X; ?, j4 z; j" Y" m4 E

+ }3 T' u& Y; d2 H
图 17
- k( X7 U2 Q, P) R# h) Z8 T
基于Linux引导裸机、FreeRTOS程序启动% s: [. U% A' @- l2 c
基于Linux启动# l- }( j5 A( O) |
本小节以产品资料“4-软件资料\Demo\RTOS-demos\”目录下的ipc_rpmsg_echo_linux案例为例进行演示。该案例主要实现Cortex-A53与Cortex-R5F核间通信,以及Cortex-A53与Cortex-M4F核间通信。# {9 z/ R: X( }" w8 s
请将案例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镜像文件拷贝至评估板文件系统根目录下。
( _/ c0 m! z6 ^" ?6 K9 A1 \( O& L$ D7 M$ h+ x2 t4 ~" F

' U" D/ _9 v, R9 x
0 _+ i& G! K+ X
图 18

1 C. s( [: M# x8 c# [2 u/ r
进入评估板文件系统,执行如下命令,删除原来的软链接。
2 e: s9 A; g: f6 g0 h0 W* @! n Target# rm /lib/firmware/am64-main-r5f0_0-fw
1 r. M  A; D. P$ d& A# q1 z Target# rm /lib/firmware/am64-main-r5f0_1-fw' i8 O  D% T+ n# G6 F
Target# rm /lib/firmware/am64-main-r5f1_0-fw3 f# l0 T3 l/ [
Target# rm /lib/firmware/am64-main-r5f1_1-fw
3 Y0 O* I$ C' U+ ~ Target# rm /lib/firmware/am64-mcu-m4f0_0-fw
* j" q5 C; }4 g. E* F; U2 B7 D! ^+ f$ ~  D! Y

! g- `6 p, K4 [+ t; l: D
" w3 V7 ]: v3 X' E2 K2 {+ n
图 19

+ _+ D& W. _* p7 v0 r
执行如下命令,创建新的软链接。
0 M4 f- Y" D+ z1 F+ r Target# ln -sf /home/root/am64-main-r5f0_0-fw /lib/firmware/am64-main-r5f0_0-fw
7 F; u$ M1 m/ `' q" w- E/ h Target# ln -sf /home/root/am64-main-r5f0_1-fw /lib/firmware/am64-main-r5f0_1-fw
8 s7 U, d8 o8 E- Z Target# ln -sf /home/root/am64-main-r5f1_0-fw /lib/firmware/am64-main-r5f1_0-fw
$ b+ p# u* x$ A+ D Target# ln -sf /home/root/am64-main-r5f1_1-fw /lib/firmware/am64-main-r5f1_1-fw* g: I* ~! w. H4 n+ N
Target# ln -sf /home/root/am64-mcu-m4f0_0-fw /lib/firmware/am64-mcu-m4f0_0-fw7 }1 j4 K  M+ r6 p

$ T) l" ^. d1 {" e  d+ @. D3 W

& I9 l- H) d. w* ]/ B
2 i/ p2 ^( J1 P( I' G! F
图 20
/ B: W1 Z. r; ?9 e! s+ _. ^
请将评估板重启,在系统启动过程中,Cortex-R5F、Cortex-M4F核心将会引导启动。在评估板文件系统执行如下命令,查询Cortex-R5F、Cortex-M4F核心与remoteproc关系。
% s( u# v1 D0 N. W# H5 F Target# head /sys/class/remoteproc/remoteproc*/name' J5 X. C( v5 ~, o
, ^& l0 ^7 p/ k0 F8 U( R
% X8 z% L, T. G$ A: s

9 G9 {" \9 |) i5 B
图 21
, N: t  Z& l4 i' G) {( L0 r, P

& Q$ Q- z2 |# ]2 c6 q4 s& B3 ]
表 2

0 g+ }2 A5 D3 q" F$ ^1 z$ K
备注:核心与remoteproc对应关系,请以实际情况为准。
, D& P& c' {' F/ ^+ P" X% ]& y( F 执行如下命令,可查看Cortex-M4F、Cortex-R5F核心程序运行日志。+ S+ O. D4 `( S0 P
Target# cat /sys/kernel/debug/remoteproc/remoteproc0/trace09 C$ ^" s0 |8 f  S- l1 V7 S6 H
Target# cat /sys/kernel/debug/remoteproc/remoteproc1/trace0$ Q( [" U* L) G  M9 s7 \% @
Target# cat /sys/kernel/debug/remoteproc/remoteproc2/trace0
8 D! O; c4 {2 {$ f Target# cat /sys/kernel/debug/remoteproc/remoteproc3/trace0
# i- [6 T" A( j. C2 T$ J Target# cat /sys/kernel/debug/remoteproc/remoteproc4/trace0
# e2 V9 O5 h  [% x5 J# b% q1 \; C
% P+ F$ M1 u  W; p

% V0 K0 J/ z) f8 j! \8 w

! O% j( d( }, k" k  p( ^" z
图 22

- }8 _, ^& Y$ Q8 X5 y8 p5 p
工程配置说明( p8 v3 K& f, s
本小节主要演示如何在Cortex-R5F、Cortex-M4F核心的Baremetal(裸机)工程与FreeRTOS工程中添加Linux引导配置。5 Q/ Z- d( Y* M4 B* Y* @
: S  L4 ^3 S$ c+ A. T) ~0 h/ H
1 m+ c% H  @' \+ z4 f
内存空间说明
0 _2 ?; p! T$ [' z, Z 如Cortex-R5F、Cortex-M4F核心的工程需支持基于Linux启动,则需进行内存空间分配,在Linux设备树中已指定内存空间,预留给Cortex-R5F、Cortex-M4F核心使用。内存空间分配如下图所示。3 _5 C. W: x8 `7 s. U& n
: v: Q6 Q: Q( }: I2 P* F

# C, X0 R- H2 q8 v$ Q
; a' i( h: X/ \. J2 ^; ?3 `
图 23
% v. E. _) y" ^0 j( D' w
Cortex-M4F工程配置
) E: E5 G# g# i0 i& \ 本小节以Cortex-M4F核心的led_flash裸机工程为例进行演示。) _+ m3 `7 R7 c" Y" k! L/ H* _' @4 R
  • IPC配置
    2 s* {2 J: @0 ?* {; ^4 U
在syscfg配置文件,添加IPC配置,具体配置如下图所示。: o# }; B0 y6 f/ L. c

* D& j: \: n/ u: ?' z+ ]
& u& {+ F+ q) O/ k$ E0 Z

! {/ r4 y; K! \. ]! R
图 24
# X" t: x3 s% y5 U) T3 z; P
  • 编译器链接脚本修改  E% [" g! u( R
双击打开编译器链接脚本linker.cmd,修改脚本内容。( u* Z/ @. q' Q% J" E

( h! z) |! a9 \0 u6 |
# H: O7 t$ e! ~* j2 E! H5 w& K
' v0 k6 Q5 |/ k
图 25

7 W  u# u& r. z0 [8 _! H+ Y
  • 在SECTIONS命令中新增一个.resource_table段,具体代码如下所示。
    : g/ h" ?0 D  X' d
GROUP {
  {6 T' E5 T8 @, n7 k4 G. S! N /* This is the resource table used by linux to know where the IPC "VRINGs" are located */
  e( T" `8 |- x* Q6 c' r .resource_table: {} palign(4096); `& s. {/ O4 f# S/ p: b
} > DDR_0
0 d2 n0 J$ O+ H& S* Q/ M) i* Q0 }/ ~1 B. s$ a+ n, I9 p9 r3 f
$ U0 L3 t9 F$ z

/ w0 s; f  M: B5 |2 |
图 26

2 @% a* R* v9 f) C) ]$ K# V
  • 在MEMORY命令中,设置.resource_table段的加载地址为0xA4100000,作为Cortex-M4F预留内存空间,具体代码如下所示。
    " }' I: E+ z( q) h+ p/ F3 {7 r4 r
/* Resource table must be placed at the start of DDR_0 when M4 core is early booting with Linux */
6 Z2 P9 g3 I( V8 k2 h+ Q3 D DDR_0 : ORIGIN = 0xA4100000 , LENGTH = 0x1000
# E, g  d5 H9 ~7 D  |6 s% f# H! q$ v0 m1 g9 O

6 F, Z4 f( P2 ^: m' O4 ^- i

1 L' U4 R" W  |/ ?1 B
图 27

8 r  h/ M9 F" c9 |/ e. A+ y/ G
Cortex-R5F工程配置
% ~, J$ b. ~9 J 本小节以Cortex-R5F核心的led_flash裸机工程为例进行演示。
% J) Q9 l0 v) G5 n. }4 g AM6412包含1个Cortex-R5F核心:r5fss0_0;AM6442包含4个Cortex-R5F核心分别为:r5fss0_0、r5fss0_1、r5fss1_0、r5fss1_1。不同的Cortex-R5F核心,编译器链接脚本指定的.resource_table段加载地址有所不同,具体如下表所示。* t! T! E( P% z7 S# z7 A' `
/ [7 T. b& C  ?* f3 t
: c/ |, R: D2 h. `/ u

% n1 N/ D( R5 [& R( m
表 3
% \; I8 I2 p$ r# m! c( r1 k6 c0 Y3 P
led_flash_r5fss_nortos工程配置的Cortex-R5F核心为r5fss0_0,下面演示如何修改led_flash_r5fss_nortos工程配置,实现基于Linux引导启动r5fss0_0。
/ x/ f( _% ?5 H
  • IPC配置
    7 ?+ [; h# n# n. m: W2 s
在syscfg配置文件,添加IPC配置,具体配置如下图所示。
( t+ ~5 P7 e3 J8 g. [+ d
+ @) @& f, p. x  H6 J# k$ ^
& I9 z3 G1 _* G$ C$ z1 k$ y

7 }3 @7 H- ]/ x8 m) ]! ~0 u& e; Z
图 28

3 H1 s7 q' p$ W( J  J9 K+ O
  • UART配置
    3 F9 q' X' u7 L/ @9 W
UART0为Cortex-A53核心(Linux系统)的调试串口。在led_flash_r5fss_nortos工程中已配置UART0作为调试串口,请在syscfg配置文件取消勾选"Enable UART Log"配置选项,或修改为Linux设备树中未使能的串口。
* H8 I7 D( s7 \- d3 K0 S, d# p7 E& B4 Z, `4 n! ~" A' q( ]( u7 n9 }/ ^
* K$ o: O# [3 s' l, X

' P! U! a) a' [0 D7 n# H- j
图 29

9 g+ g, O: P' L. B
  • 编译器链接脚本修改: h* v. [  r7 F) o5 _
双击打开编译器链接脚本linker.cmd,修改脚本内容。* o' ]0 m* {; {

& n# U0 c! I9 ]
: \- c. q* z0 i/ p* H0 t

- i7 ^7 ]+ a- Q( G! o/ s
图 30
* Y$ e* Z! x) w2 C' E- v
修改内容如下:8 r, L4 c$ v# o( q: F! `" @
  • 启动代码链接至R5F_TCMA;
  • 新增一个.resource_table段;
  • 代码段、数据段、bss段、堆栈全部链接至DDR,在Linux上为r5fss0_0预留内存地址空间;# r2 `( }6 k0 L: R5 v* \  l
SECTIONS  @# j5 Q3 J- o8 I
{- r. J1 S( Z' x& [+ g3 D- X
GROUP {1 I# c: D7 W: v6 |
.text.hwi: palign(8)/ [! R" \! H" `+ r" w
.text.cache: palign(8)
- y6 I/ U# B6 Z .text.mpu: palign(8)
3 p! {7 d) z  S  q( H6 b7 d .text.boot: palign(8)
7 K# f; l% e1 L" C9 r6 G, b# k .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */
+ o/ b, d* e# |$ K, O  C2 { } > R5F_TCMA7 q2 O/ w* L* K1 b- p) n
GROUP {& R: P: m/ G+ C4 y, z
.text: {} palign(8) /* This is where code resides */* Y+ R1 A+ {) g2 B- o
.rodata: {} palign(8) /* This is where const's go */
* V. p5 B9 T8 J# Y0 [" J. Y } > DDR_1
; L$ _) V# g" V9 ]9 ~1 ?' i) i GROUP {$ V5 x3 [2 s) o  p! z
/* This is the resource table used by linux to know where the IPC "VRINGs" are located */
% \; K; P& R1 S: Y: V+ P .resource_table: {} palign(4096)
5 h9 x0 p  _2 e) i5 T2 S. C5 A } > DDR_07 [# }' q; U" r+ \2 L/ q, A
GROUP {
6 T+ y# ^# Y( y: O7 C .data: {} palign(8) /* This is where initialized globals and static go */# U6 R3 i# I6 r9 p
} > DDR_1
. @4 e2 I  N: k: V3 W- q GROUP {
% W, u4 [4 R9 k! e0 l .bss: {} palign(8) /* This is where uninitialized globals go */0 t3 H. T0 L0 H8 i0 s. m9 B
RUN_START(__BSS_START)7 b+ ~: k6 |5 P* z. H: V7 k! l9 [
RUN_END(__BSS_END)8 J6 d9 |  d4 e, ?$ B! w
.sysmem: {} palign(8) /* This is where the malloc heap goes */, W. w( Q8 w0 U4 Z
.stack: {} palign(8) /* This is where the main() stack goes */
4 i- H/ J* E9 K4 @+ ~: P } > DDR_1
+ ?' ]/ k& k% Q/ Q* U" h GROUP {
0 F) B* A2 d4 q& d .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8)) n0 e/ E& I0 @& _% C. X
RUN_START(__IRQ_STACK_START)
- N( G9 u4 C/ W8 a- Y* e# D; z RUN_END(__IRQ_STACK_END)
; a& M3 C' ~* Q. C5 \0 \ .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8)9 i  a3 G! S& x# h0 @
RUN_START(__FIQ_STACK_START)
! @6 W% w8 i" O& P$ b7 K RUN_END(__FIQ_STACK_END)
6 j7 j; w/ X5 ]7 _5 l# n0 `' _ .svcstack: {. = . + __SVC_STACK_SIZE;} align(8). U- w  N  [" }, {2 {* s" @* d
RUN_START(__SVC_STACK_START)9 r. z$ m' f7 p+ c/ X! l
RUN_END(__SVC_STACK_END)+ W; g( o. d' v( b6 M
.abortstack: {. = . + __ABORT_STACK_SIZE;} align(8)
5 ~0 ^3 l* D/ |. \8 @) J$ T RUN_START(__ABORT_STACK_START)" s6 `- i7 k: c2 A( Z1 U8 l7 A: n4 X
RUN_END(__ABORT_STACK_END)5 O# \! [: ]3 L% J5 B) K
.undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8)! |0 d: U# o  m: y6 R; s  l
RUN_START(__UNDEFINED_STACK_START)
; A. O, R3 s# v+ a, z RUN_END(__UNDEFINED_STACK_END)
: L& U* ]# X, a3 f* K6 b; L } > DDR_1
6 _$ k4 `) _& [2 O- H, Y+ F /* Sections needed for C++ projects */
5 F, }/ q! I2 j. }: T( y* J GROUP {
/ f1 q7 ~0 a* m) X7 _ .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */( a2 e8 T: P# q1 B, ~. J
.init_array: {} palign(8) /* Contains function pointers called before main */8 g( r+ }, H: Q" ?
.fini_array: {} palign(8) /* Contains function pointers called after main */! g/ `7 E! U2 e
} > DDR_1
' t3 d. C, o. o. {8 [  i /* Sections needed for C++ projects */
" n- J8 z) _. r4 [/ G# w! q3 m GROUP {
: J$ |: p% m- G& P .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */' P6 {7 G. m5 }* C9 D+ o
.init_array: {} palign(8) /* Contains function pointers called before main */* i  ~) w1 b8 B3 t  i% m
.fini_array: {} palign(8) /* Contains function pointers called after main */
; C9 @. G8 @% J6 g: l( o6 c% @ } > DDR_1
6 f0 ~$ C8 n4 r6 f, N5 E* j }7 i+ A: ?# W3 |- W2 w- n' R

( c2 Z3 y% Y, ~% K% y
; f' L1 A8 e/ d( v
6 U, n+ Z/ B0 p
图 31
5 g2 _( H% Y( Z0 y  i+ Y

. @" c- X+ a! n4 I* g  x: d1 _' j
图 32

  h7 u' u2 H+ t# l
  • 设置.resource_table段的加载地址为0xA0100000,作为r5fss0_0核心预留内存空间;
  • 设置共享内存链接至Linux为共享内存预留的内存地址空间。( r3 e! O8 u9 E, m* k: H3 ^: A
/* Resource table must be placed at the start of DDR_0 when R5 cores are early booting with Linux */1 Z/ A' Y' z. B7 e1 a2 A
DDR_0 : ORIGIN = 0xA0100000, LENGTH = 0x1000
! ]" L* p1 _0 o; a DDR_1 : ORIGIN = 0xA0101000 , LENGTH = 0xEFF000
" o2 I: \2 N5 Y% ?) @ USER_SHM_MEM : ORIGIN = 0xA5000000, LENGTH = 0x801 U( `+ K: p( b6 j1 `
LOG_SHM_MEM : ORIGIN = 0xA5000000 + 0x80, LENGTH = 0x00004000 - 0x801 S& v0 P$ E; O! k5 n2 n) q
RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0xA5004000, LENGTH = 0x0000C000
( z5 B* K8 E. z9 a- s" e$ h  ^) _. @8 q3 L+ A/ \& J
3 t! H/ E2 H; }  t2 u5 ~* M

/ a. K( x8 B, v7 e0 @
图 33
% `- a' s0 J7 X' \) F8 T

9 J$ p" ^' J3 z& @, y, E' g' q4 d( S! D1 H  [& Z# x5 W

. h# v/ T  ?) A  I

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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