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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
                          前 言
" j3 v1 c) @% k& H8 M; o 本文主要介绍AM64x的Cortex-A53、Cortex-M4F和Cortex-R5F核心程序自启动使用说明。默认使用AM6442进行测试演示,AM6412测试步骤与之类似。
" S5 k7 ]& j* k2 W2 o- L9 D5 |/ H( \/ p  h3 C5 Z7 n% K. M# n4 v
" b. t2 G  q/ ~/ G  j
本说明文档适用开发环境如下:, [; I$ a% C1 d1 W* l8 z8 X

" K3 x1 n2 c2 c2 F Windows开发环境:Windows 7 64bit、Windows 10 64bit
1 M* U  A: f8 E 虚拟机:VMware15.5.5
$ b5 s! P# J4 K; [+ v9 Z Linux开发环境:Ubuntu 18.04.4 64bit2 o3 ^& s4 z! k2 |: D+ w6 ^! P
Linux Processor SDK:ti-processor-sdk-linux-rt-am64xx-evm-08.01.00.39- p) g$ E9 M! D6 v
U-Boot:U-Boot-2021.01
+ _# m. N' D3 H6 w+ G7 ?! z CCS版本:CCS11.2.0
$ o) w( ]0 X0 s& O' K9 q5 H mcu+ SDK:mcu_plus_sdk_am64x_08_03_00_18
1 s. `# c" g- a/ @5 D SysConfig:sysconfig-1.12.1_2446
+ O( w& w* i  z: f# U GCC AARCH64 Compiler:gcc-ARM-9.2-2019.12-mingw-w64-i686-aarch64-none-elf
7 ^+ K# \4 e. z" t% P% Z! _& F 本文测试板卡为创龙科技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和高低温测试验证,稳定可靠,可满足各种工业应用环境。" p5 L$ M8 Z- G
; Q: T7 x3 b. K" z

( g* F# w: I8 ?4 h0 g& Q0 k

/ f9 H* a& ?6 j+ F$ L: x' Q7 E

' g; w/ L  i1 I8 t7 o% z% T" D8 K2 v
用户使用核心板进行二次开发时,仅需专注上层运用,降低了开发难度和时间成本,可快速进行产品方案评估与技术预研。
, \% L1 B) N( s
1 h% M6 r+ `5 {$ Z

$ U2 t. ^  R0 H 基于SBL引导裸机、FreeRTOS程序启动  ~- E5 L1 G& `
程序启动流程说明
& ]" c# \( f; _* }/ `9 x 评估板上电后,固化在CPU内部的RBL将会先运行,RBL根据评估板BOOT SET从启动介质(如eMMC,Micro SD、SPI FLASH)读取SBL,然后通过SBL引导应用程序启动。
: {8 ]$ y6 F% Y2 b$ b4 z. r 程序启动流程如下图所示。
) P$ @, |9 S# U* A" d! l9 p' H! s- b. v4 w1 X

" Y2 [8 W" F; ]

& l+ _! }; b. x7 v4 `; U2 s
图 1
目前官方提供的MCU+ SDK(版本为mcu_plus_sdk_am64x_08_03_00_18),SBL将会先读取应用程序至MSRAM,然后再进行解析。由于MSRAM空间有限,分配给SBL使用的内存空间仅512KByte,并且SBL运行需使用部分MSRAM空间。因此,为确保SBL引导应用程序正常启动,应用程序大小不能超过380KByte。
5 k' W& k" e; O% U8 @9 ~6 e( ]# C
. l$ v! a" D- c/ K5 E
3 i/ `$ t0 b; \0 F& a
4 J9 g$ V) m& t; x, D$ T
图 2
( q' L" |+ W- F6 `2 t

' [) A& H6 p! j6 E! {  z1 z) L& O
基于Micro SD卡启动1 l+ Q, K1 t% q3 g$ a/ d& P: C
启动卡制作
% r7 [# O5 J) ~9 W% I% D' { 请准备一张FAT32格式的Micro SD卡,通过读卡器将Micro SD卡连接至PC机。
- t! s( d% [8 G) [  x9 l 双击产品资料“4-软件资料\Tools\Windows\”目录下PartManFree-Setup.exe分区管理软件,按默认安装即可。安装完成后,打开分区管理软件,将会自动识别到Micro SD卡分区,请右键选中该分区,点击"Set Active"设置为活跃分区,如下图所示。
5 t3 r) G: t' P  E# D# C1 i4 K7 D" Z5 y& H5 y' {7 H
, l& n% i% d7 m; @
) t0 h1 ~! U6 }8 d
图 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,如下图所示。
$ S5 r6 O# j% M/ W 备注:sbl_sd.release.tiimage为官方提供的SBL镜像。
3 b0 i" |) f( q  B4 N. t) F4 }: A% r- X2 A- l

7 J' w) ~. ?2 z. G; z& ~

/ J+ v; x8 C* Q6 [2 E
图 4
1 j8 _- U% u% N4 G4 Q7 v" M; b' F6 ~  v

/ P" M) \5 z9 p: }2 S: Y
图 5

' U3 Y. u) E8 C
单核启动 本小节以Cortex-A53核心的led_flash裸机工程为例进行演示,Cortex-M4F和Cortex-R5F核心操作步骤与之类似。
/ G; e0 N; X8 E 请参考《FreeRTOS、Baremetal案例开发手册》文档,正确编译产品资料“4-软件资料\Demo\Baremetal-demos\led_flash\project\”目录下的led_flash_a53ss_nortos工程,然后将编译生成的led_flash_a53ss_nortos.appimage镜像文件拷贝至Micro SD卡,并重命名为app。% R& J' e6 Y0 ?  k5 G- {

: y; k9 F5 t0 q. P* B. }2 N
( D1 _' i" _. W4 F, D4 d
: R6 K$ f  |0 B$ U
图 6
! b  }5 n6 V& H

1 F  F" B/ W4 k# @# |  y
图 7
5 b% _; t) f* ?, D' u
请将Micro SD卡插入评估板Micro SD卡槽,根据评估底板丝印将启动方式选择拨码开关拨为101000(1~6),此档位为Micro SD启动模式。然后使用Micro USB线连接评估板的USB TO UART0调试串口至PC机,
! F  }/ w; Z: j6 s$ W. } 请将评估板上电启动,串口调试终端将会打印如下类似启动信息。同时,可观察到评估底板LED1、LED2闪烁,说明程序自启动成功。
% s0 R4 B1 d1 ~) {" m! O1 t8 U6 t# B/ r1 D5 `# l

1 n6 A5 K, Z2 \) {9 ?! \

) p! V' w* W+ `! l; \- R
图 8
6 w3 h3 y% w' N
多核启动 本小节以Cortex-A53、Cortex-M4F和Cortex-R5F核心的led_flash裸机工程为例进行演示。; j4 U5 M' F5 o& X
请在磁盘根目录新建一个非中文文件夹test,将产品资料“4-软件资料\Demo\Baremetal-demos\led_flash\bin\”目录下的led_flash_a53ss_nortos.out、led_flash_m4fss_nortos.out、led_flash_r5fss_nortos.out全部拷贝至该目录下。
& m: \* B9 A3 i2 R5 t7 d. e6 |

9 h2 F+ ?1 p9 A3 i5 V! U; I- c
图 9
) I* L5 _5 G9 @, G9 l: A
右键Windows按钮,点击"Windows PowerShell(I)",打开Windows PowerShell终端。
0 L. E; l& w: \) f* r0 t$ D" L3 l$ T, v

4 b9 p* Q, w# f; I; ~4 S
6 N. j6 s# L7 X1 P' H4 V
图 10

; x5 M  X  z1 M* f/ I8 ~1 O% L* m
在Windows PowerShell终端执行如下命令进入test目录。  S8 \$ R7 N" ~( P" D
Window# cd E:\test\
3 |2 H3 W3 }+ x$ }, H- A2 @$ I6 y4 w# _# I- T/ H& j

* x8 g) G/ F# X1 |

4 z3 b4 l* Z+ B! N+ _" o' ~5 z
图 11

: q( G9 \8 M# N% U  Y
  • rprc文件生成' w0 [5 ~1 l' b  N( A8 o. h& q
在Windows PowerShell终端执行如下命令,基于xxx.out文件使用CCS和MCU+ SDK生成xxx.rprc文件,xxx.rprc文件已包含可加载段的bin文件。CCS与MCU+ SDK路径请以实际情况为准。
) o( P: p' }% f9 ]( f, B5 C 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
- s7 k* T: T7 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_m4fss_nortos.out
* A# u$ a, ]8 u5 a9 ]0 h1 [. q. L 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
5 b( |* d8 T: T: |4 ~
3 d6 F' ]- Z$ I0 [2 Z8 t4 |
/ F0 w- y" V6 H6 c1 ]9 @7 z

0 R  D) _7 F1 F) z
图 12
; V, X, j1 A, T9 c: {
执行完成后,将会在当前目录下生成了led_flash_a53ss_nortos.rprc、led_flash_m4fss_nortos.rprc、led_flash_r5fss_nortos.rprc文件。. C' U" A! ^, V; H% W, z

8 j/ x; X1 v+ g

% }& a, {! E6 R( ]& }9 J4 R

3 P, r2 L3 ?! x) b) }
图 13
, q  |7 Y* a3 ?! J) e  M# \3 f8 N
  • appimage文件生成
    / z3 @! ~3 M# _; H+ r* n8 d$ V
基于xxx.rprc文件生成镜像xxx.appimage,需指定启动核心的ID,对应关系如下表所示。5 o/ o' |! [$ M* W. Y
备注:AM6412包含1个Cortex-R5F核心:r5fss0_0;AM6442包含4个Cortex-R5F核心分别为:r5fss0_0、r5fss0_1、r5fss1_0、r5fss1_1。
3 f+ c. O+ X  T+ A
8 \) o# C" A( V! Y. c  h% ^

. A& d1 d& y" y4 R

" r; ?* B0 V# ]
表 1
: r4 T/ l: u; N. A3 |
在Windows PowerShell终端执行如下命令,将Cortex-A53、Cortex-M4F和Cortex-R5F核心的led_flash可执行程序合并为led_flash.appimage,并指定运行核心分别为a53ss0_0、m4fss0_0、r5fss0_0。
* A' T: V* I! a+ n: k# X5 x 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
. [: s2 \) d  l# B
/ i) J8 _$ }  W. F6 \1 c
, c: y- ~. [3 G; M: {! K
图 14
& j& g* Q( C- |' E/ b$ j3 Y+ G8 V
执行完成后,将会在当前目录下生成led_flash.appimage镜像文件。: d5 j0 w6 r9 S/ y& m
) M4 {% ?0 F# y4 c

1 B; s8 {  ^9 n7 [( c  C! _
( b0 V+ A* f2 t' V
图 15
: X6 U. t2 p) @. D
请将生成的led_flash.appimage镜像文件拷贝至Micro SD卡,并重命名为app。) E7 W7 [( P! ?- U

' U7 ^3 I! {) k% d, ]. Q0 s5 U1 A
( R5 g1 A. H+ G7 R4 G

8 F. z  L/ a* v7 A: f% @
图 16
5 Z7 e" ?3 u2 j, t' M9 g1 D3 H
请将Micro SD卡插入评估板Micro SD卡槽,根据评估底板丝印将启动方式选择拨码开关拨为101000(1~6),此档位为Micro SD启动模式。然后使用Micro USB线连接评估板的USB TO UART0调试串口至PC机。
2 S$ \1 Q& {5 W* s 评估板上电启动,串口调试终端将会打印如下类似启动信息。同时,可观察到评估底板LED1、LED2、LED3闪烁,说明程序自启动成功。
( m- \/ \+ ^: W9 ?* I) P2 [- \$ R* J) {3 p' a8 n2 v

, _- B9 H$ `# h: X) X! H

& v* ^9 j5 B1 N/ t7 X  a, s
图 17
* p% R' I$ ~4 D" d/ o
基于Linux引导裸机、FreeRTOS程序启动
0 ^; r: Z7 k8 v4 M 基于Linux启动
  o4 \) c4 u, j  j) Y+ U 本小节以产品资料“4-软件资料\Demo\RTOS-demos\”目录下的ipc_rpmsg_echo_linux案例为例进行演示。该案例主要实现Cortex-A53与Cortex-R5F核间通信,以及Cortex-A53与Cortex-M4F核间通信。# j/ V( c# ]; K5 M, C6 L! D
请将案例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镜像文件拷贝至评估板文件系统根目录下。0 {6 u" z% X: i" s
& c+ `& W: g2 [! W4 o

+ N- X' }9 F& c0 r8 t, r! m, ~4 {
: M3 z0 p& B: _7 i  Q& S9 S( f$ E7 t
图 18

9 p! S" N' O1 h; Q: x
进入评估板文件系统,执行如下命令,删除原来的软链接。
( h7 y3 O6 R* k Target# rm /lib/firmware/am64-main-r5f0_0-fw& O9 q% W2 a3 j  z
Target# rm /lib/firmware/am64-main-r5f0_1-fw
) O1 t% t$ X3 q) n5 o5 N. \ Target# rm /lib/firmware/am64-main-r5f1_0-fw
2 Z! P3 l7 S$ I( V Target# rm /lib/firmware/am64-main-r5f1_1-fw
$ ?2 {! _3 w" X. i) Q# _ Target# rm /lib/firmware/am64-mcu-m4f0_0-fw+ G- C8 }! {3 W1 F6 Y4 ]
" P9 \+ Y6 J& x& S
% a' n' L/ ~' p9 q" U: i. ~/ t
! N+ _" c; d8 G4 I5 w$ j* m& q
图 19
/ u$ @% l5 \5 E$ P: M0 V3 ~! s
执行如下命令,创建新的软链接。
: n/ A$ [3 T/ c- w5 C Target# ln -sf /home/root/am64-main-r5f0_0-fw /lib/firmware/am64-main-r5f0_0-fw
" ^4 C3 s/ ^' w  i; v* g9 i/ o Target# ln -sf /home/root/am64-main-r5f0_1-fw /lib/firmware/am64-main-r5f0_1-fw
1 m, n, i6 T2 U4 P7 ^$ `2 l2 ^ Target# ln -sf /home/root/am64-main-r5f1_0-fw /lib/firmware/am64-main-r5f1_0-fw
. @5 N" K3 ^) H' V Target# ln -sf /home/root/am64-main-r5f1_1-fw /lib/firmware/am64-main-r5f1_1-fw
" t2 u6 F1 T9 M Target# ln -sf /home/root/am64-mcu-m4f0_0-fw /lib/firmware/am64-mcu-m4f0_0-fw
) Z/ a# N& ?' @: C9 Q' {+ [- N0 h/ n" ?% b/ V7 M, {7 c

. U+ A$ [( }" ]; q" I- l
: r; I# [9 E6 ~4 b7 Q+ t; k
图 20
  H9 [- H' w8 z" q
请将评估板重启,在系统启动过程中,Cortex-R5F、Cortex-M4F核心将会引导启动。在评估板文件系统执行如下命令,查询Cortex-R5F、Cortex-M4F核心与remoteproc关系。
9 ~# W+ o* E1 L. [) W Target# head /sys/class/remoteproc/remoteproc*/name1 y2 l2 {% \+ ^" P/ S! ]
" O4 E# ~7 V, O  F$ @) W

5 y* [3 {4 t$ @1 ^+ M

- ^$ m; v; P7 a7 a& \' L! X8 |, \1 W& i
图 21
4 I8 q4 L2 H3 ?3 T# g$ R4 t

+ a+ c2 \, L3 e- n
表 2

; A7 k5 i0 I* Z9 _0 A3 g( C
备注:核心与remoteproc对应关系,请以实际情况为准。, p9 F# K" e# n% ^
执行如下命令,可查看Cortex-M4F、Cortex-R5F核心程序运行日志。+ d, r9 e' L( G# Y" y6 u+ |" ^
Target# cat /sys/kernel/debug/remoteproc/remoteproc0/trace0  Q! N5 h$ y! O' b3 h
Target# cat /sys/kernel/debug/remoteproc/remoteproc1/trace0
' I6 x' h8 `# V$ Z# @! K! x Target# cat /sys/kernel/debug/remoteproc/remoteproc2/trace0
3 z, K9 `+ `$ x6 M5 \9 U1 ^ Target# cat /sys/kernel/debug/remoteproc/remoteproc3/trace0. w4 N1 ]# Y2 U  D! ^5 n# m
Target# cat /sys/kernel/debug/remoteproc/remoteproc4/trace0$ S5 O% L& K% E
. w1 j- K/ d! o
& G+ E" z- d/ L
" u5 q8 K1 b/ V* g: F( A. y+ R- @
图 22

6 r2 U. W! H% v8 k  p
工程配置说明5 }# X- ]6 q3 P, M7 K7 S' @
本小节主要演示如何在Cortex-R5F、Cortex-M4F核心的Baremetal(裸机)工程与FreeRTOS工程中添加Linux引导配置。  r$ N0 L6 w. m5 j' L1 S+ y
# U) J. q; T( n6 j* q% Y) ^

! X4 |& g0 S, y, V, o 内存空间说明
  {: V8 L* ~( ?! M3 g 如Cortex-R5F、Cortex-M4F核心的工程需支持基于Linux启动,则需进行内存空间分配,在Linux设备树中已指定内存空间,预留给Cortex-R5F、Cortex-M4F核心使用。内存空间分配如下图所示。% j4 q' w9 \% @& G+ N
: }$ D# r* ]5 b: \0 f. Z

( n' k8 V; \' x8 }  O
! \8 }/ H0 S6 f8 y
图 23

5 H  R# T' M: N; }
Cortex-M4F工程配置
; f- O+ f; `# v( m% h 本小节以Cortex-M4F核心的led_flash裸机工程为例进行演示。
: A- s1 w; V1 |  c1 n7 J
  • IPC配置! g% A: l+ ^' v, D7 E  O
在syscfg配置文件,添加IPC配置,具体配置如下图所示。
6 Y% ~7 t, ]0 R, r1 ^2 W/ l) f( u* ?  u- d0 m
) u( u7 p6 L( P3 P$ G1 G5 N
/ D7 H# O' A; f- J
图 24

. ~, i& M" M9 Y, o3 u
  • 编译器链接脚本修改
    5 K$ ?" Q# J# _8 ^. v9 T# Z1 A
双击打开编译器链接脚本linker.cmd,修改脚本内容。
- h* p* ^! I0 l, e9 }0 i3 F$ ]! H
! a* H1 Q+ {& T( \
8 X- }7 C5 M; A& e
5 ?) `4 L6 x7 o0 Q5 Z& ~  e) {% v' T
图 25

2 q: E0 U8 D: f5 E0 L( n
  • 在SECTIONS命令中新增一个.resource_table段,具体代码如下所示。
    " I3 ^: h+ H( X" B4 V/ I
GROUP {
6 T4 a7 g2 l) ^& V /* This is the resource table used by linux to know where the IPC "VRINGs" are located */( j' X) d5 k  h4 n9 }- @
.resource_table: {} palign(4096)
' {/ h6 {4 |6 v3 ^9 A1 b } > DDR_02 K0 I9 Z, S8 c8 X  I

- W* ]4 g( K2 f
/ s0 K5 D/ t. q  l: }, o
* F' O3 K- H7 J* ?
图 26
4 I2 ~  A6 y/ M0 R1 ^
  • 在MEMORY命令中,设置.resource_table段的加载地址为0xA4100000,作为Cortex-M4F预留内存空间,具体代码如下所示。
    ! B: X: _" G! U( p
/* Resource table must be placed at the start of DDR_0 when M4 core is early booting with Linux */
5 [6 L6 L5 e8 w+ C5 g DDR_0 : ORIGIN = 0xA4100000 , LENGTH = 0x10005 P5 W0 l7 s0 x8 g" s& I

( Q7 d1 `. I) ]

( p9 c( p/ j% o7 w& g

& |1 t3 z' a, Z
图 27

$ F9 L4 Z9 E/ R  B$ r7 \
Cortex-R5F工程配置( K) W) p- R" z% i1 S  i0 f
本小节以Cortex-R5F核心的led_flash裸机工程为例进行演示。
3 n* N# R+ ?1 U: H8 u AM6412包含1个Cortex-R5F核心:r5fss0_0;AM6442包含4个Cortex-R5F核心分别为:r5fss0_0、r5fss0_1、r5fss1_0、r5fss1_1。不同的Cortex-R5F核心,编译器链接脚本指定的.resource_table段加载地址有所不同,具体如下表所示。; ?1 b4 W) c% h6 X* R' v# r

% q7 B6 h% y) J  \* o4 v

/ u2 Y" L9 i! h" R7 e- n
0 A5 K- g+ H. E7 m2 a# B3 `" f
表 3
; d+ e  r) h6 @4 [! N9 C
led_flash_r5fss_nortos工程配置的Cortex-R5F核心为r5fss0_0,下面演示如何修改led_flash_r5fss_nortos工程配置,实现基于Linux引导启动r5fss0_0。8 |. R! u. n4 f- R3 U4 W; \
  • IPC配置
    5 v% z7 M( ?6 F
在syscfg配置文件,添加IPC配置,具体配置如下图所示。, b' z2 t, @9 ~0 u- K  Z

7 j6 R# C' k3 `9 e# K1 k6 ~
. c  e3 C, p( l$ y

- s/ a  A# d3 d$ Q2 Z1 ]
图 28

' J/ w3 p3 }  u0 Q
  • UART配置
    # \4 F: R0 S# Z, u+ m# ]
UART0为Cortex-A53核心(Linux系统)的调试串口。在led_flash_r5fss_nortos工程中已配置UART0作为调试串口,请在syscfg配置文件取消勾选"Enable UART Log"配置选项,或修改为Linux设备树中未使能的串口。
  I  \* N8 P' f9 V7 E$ N3 D; I4 F: C! ?/ o. ?% |. [, c" E
, N& P7 \$ E- ~, w$ q
* y- e7 Y8 J8 X* x8 V# ?+ |) `
图 29
+ B$ H# Q& N& W' c
  • 编译器链接脚本修改
    - f- A3 [- u: k, P( j
双击打开编译器链接脚本linker.cmd,修改脚本内容。# `" h' ^( Y8 W( d7 S

- ?( {& ]3 q& u. ]! d* G

! U) Z9 I6 s! x; F8 p, r+ Y8 L

2 b: c1 D' N5 J6 \9 ]
图 30
4 {& X5 f. h6 _8 b8 }4 e
修改内容如下:
( [$ N6 A  b- X% i1 H
  • 启动代码链接至R5F_TCMA;
  • 新增一个.resource_table段;
  • 代码段、数据段、bss段、堆栈全部链接至DDR,在Linux上为r5fss0_0预留内存地址空间;
    , Y& b+ j. \0 ~4 O. J" Y2 l6 |- m
SECTIONS9 I+ u& `  M7 q/ J3 v' D) @( _
{
: p7 [$ _/ @+ ^, H1 V5 V GROUP {% _9 N; v0 W" }) j' S5 x
.text.hwi: palign(8)( {0 @- l/ z2 [, W! r; F! n
.text.cache: palign(8)) c* K3 s- }/ |7 B, u. ?8 v* b3 x
.text.mpu: palign(8): t# |+ l$ y5 }2 i2 Q
.text.boot: palign(8)
! \" P7 c) i9 U- G .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */
5 H' J# t' f$ G3 q- G } > R5F_TCMA0 \5 O) p; _# k6 D1 ?2 E
GROUP {
7 ?& R% a/ V( d, g0 o .text: {} palign(8) /* This is where code resides */
/ j# k5 r7 E2 W- I0 m, U .rodata: {} palign(8) /* This is where const's go */
" v# j8 u5 [) j } > DDR_1
- a. L8 p( [0 f6 H4 `6 z6 ^+ P2 d0 ^ GROUP {; E2 C* T  B+ L
/* This is the resource table used by linux to know where the IPC "VRINGs" are located */
: R6 ?/ \- h+ J9 S .resource_table: {} palign(4096)* ?" _) l8 z+ H5 a9 X
} > DDR_0# |6 J& i# ]8 v% i  {6 C
GROUP {
8 \  H4 Y- X( j+ Z; M .data: {} palign(8) /* This is where initialized globals and static go */
5 w8 i; @2 I8 A# W5 I: B } > DDR_18 c. i5 q% O& S2 n
GROUP {* @* x1 Y) s4 e6 O
.bss: {} palign(8) /* This is where uninitialized globals go */. M8 _$ d/ N* p2 D  A: L0 s
RUN_START(__BSS_START)  c2 C3 K- m. A5 L
RUN_END(__BSS_END)
! T0 K9 e0 G0 m  a: C .sysmem: {} palign(8) /* This is where the malloc heap goes */
4 s0 F5 I7 |6 `1 I .stack: {} palign(8) /* This is where the main() stack goes */
. S2 z" p. x) B( b+ [1 n } > DDR_1( G' Z0 W7 G5 V4 z
GROUP {
" ~, t5 D6 W- L3 J: h .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8)3 \9 p( Z8 S0 u1 s6 c) O5 ?
RUN_START(__IRQ_STACK_START)5 y, c8 o' f" [, S, T* L, c
RUN_END(__IRQ_STACK_END)
* ?% H$ n4 [2 n- | .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8)6 I- D6 p, y& u- y2 P" D! `; ~
RUN_START(__FIQ_STACK_START)! y4 l+ y( a& w& h; M' _
RUN_END(__FIQ_STACK_END)1 o$ q7 n, |) u0 C' }: B
.svcstack: {. = . + __SVC_STACK_SIZE;} align(8)! @( Z/ g  S, d2 v  c6 A
RUN_START(__SVC_STACK_START)
, M* G" E0 `5 t2 _ RUN_END(__SVC_STACK_END)
* O* @6 ~5 N0 [8 K2 o+ H; |5 z .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8)
7 F. \' T8 Y% @) _ RUN_START(__ABORT_STACK_START)
0 R8 S* f, w2 g& S+ o$ X* [ RUN_END(__ABORT_STACK_END)
; v, l( c5 Q6 ]" ~- V# E1 M .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8)+ t) J: l" b2 r- ]+ Y  x
RUN_START(__UNDEFINED_STACK_START)  |! ^% k% m: O8 E4 A
RUN_END(__UNDEFINED_STACK_END)
1 o- Y1 }8 u( }# {2 q } > DDR_18 U1 ^, Z0 L2 P, t/ R
/* Sections needed for C++ projects */
& N7 {5 ^7 P2 m. {; j GROUP {% Q% \% _/ Z. J7 K
.ARM.exidx: {} palign(8) /* Needed for C++ exception handling */
  }! V" J# j( V7 N" ]  \4 R5 ?, r .init_array: {} palign(8) /* Contains function pointers called before main */
  }0 A5 ?) ~: n2 j8 V- a .fini_array: {} palign(8) /* Contains function pointers called after main */
2 g. p7 V6 T, R } > DDR_19 v: X: ]$ Y2 q$ \5 C9 w
/* Sections needed for C++ projects */" j) y: W" D4 ~3 f$ r: _
GROUP {. S3 ~+ v+ c# i
.ARM.exidx: {} palign(8) /* Needed for C++ exception handling */
* f" u' {7 v0 T5 W# b .init_array: {} palign(8) /* Contains function pointers called before main */7 Q' z" l- H) c
.fini_array: {} palign(8) /* Contains function pointers called after main */
/ U8 f1 U4 A6 t/ E. E6 F2 O } > DDR_1. |* c5 E, }# u/ c
}
7 Y% J, S* b# M7 r& ]6 T2 U* W& m5 `' l" N9 b

- n. s, J) }. |2 X* @2 y
1 {/ x, Y( m* V% {
图 31
' J; t0 T* }. K( Q
; `" q/ G& K6 j% ?" y
图 32
* z: c9 r( m6 f* p
  • 设置.resource_table段的加载地址为0xA0100000,作为r5fss0_0核心预留内存空间;
  • 设置共享内存链接至Linux为共享内存预留的内存地址空间。2 Z0 u" b  b7 ~% W) K2 ^
/* Resource table must be placed at the start of DDR_0 when R5 cores are early booting with Linux */
% r' j. q( w# h8 x2 x2 B& y DDR_0 : ORIGIN = 0xA0100000, LENGTH = 0x1000
' ?$ p* D3 e: r; a; F DDR_1 : ORIGIN = 0xA0101000 , LENGTH = 0xEFF000
/ t* ]2 h  I+ U, t: p( Q  O USER_SHM_MEM : ORIGIN = 0xA5000000, LENGTH = 0x80
" {0 {6 C0 T2 I9 D. Y1 c LOG_SHM_MEM : ORIGIN = 0xA5000000 + 0x80, LENGTH = 0x00004000 - 0x807 l# @) V! i" K6 f
RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0xA5004000, LENGTH = 0x0000C000
1 w4 r+ V. O1 w9 f# e9 r' s" j9 {; z% G; U$ O/ v
, o3 a4 w, k7 C: r1 p2 q' ]
  j9 @6 D- ]* J  C+ g" a
图 33

* L& m1 _, w3 _0 \) e

; O" _% D- H/ s) ?, Z  }& _1 |* V! A! ~8 Q' @& \/ [* |2 D
: v; Z+ m& p7 F1 _8 `0 F

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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