RT-Thread启动和Memory分配

AMP启动中,Linux和RT-Thread各自独立启动,其配置入口设置在U-Boot的DTS中,其中分割了Linux domain和RTOS domain。在OpenSBI中每个核会根据不同配置跳转到不同的地址,其中RT-Thread没有跳转到U-Boot的第二阶段,直接从OpenSBI跳转到RT-Thread。

RT-Thread端

RT-Thread的rtthread.binu-boot.bin文件一起生成visionfive2_fw_payload_amp.img,SPL镜像u-boot-amp-spl.bin.normal.out会把该镜像读到DDR的起始物理地址0×40000000。该镜像的组成部分如下:
1. 内存地址范围
RT-Thread端 范围 内存大小 是否linux kernel回收
OpenSBI 0×40000000 - 0×401fffff 2M 一直保留
U-Boot (S Mode) 0×40200000 - 0×4032ffff 1.19M 启动后Linux kernel会被回收
RT-Thread 0×6e800000 - 0×6effffff 8M U-Boot-SPL第一次把RT-Thread加载到内存中,起始地址是为0×40330000,然后迁移到0×6e800000地址,0×40330000的地址会被回收。

Linux端

Linux端为AMP保留了28M内存,其中共享内存设置为4M。内存分布如下:
2. 内存地址范围
Linux端 范围 内存大小
共享内存 0×6e400000 - 0×6e7fffff 4M
RT-Thread代码,栈空间 0×6e800000 - 0×6effffff 8M
RT-Thread堆空间 0×6f000000 - 0×6fffffff 16M