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.bin和u-boot.bin文件一起生成visionfive2_fw_payload_amp.img,SPL镜像u-boot-amp-spl.bin.normal.out会把该镜像读到DDR的起始物理地址0×40000000。该镜像的组成部分如下:
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。内存分布如下:
Linux端 | 范围 | 内存大小 |
---|---|---|
共享内存 | 0×6e400000 - 0×6e7fffff | 4M |
RT-Thread代码,栈空间 | 0×6e800000 - 0×6effffff | 8M |
RT-Thread堆空间 | 0×6f000000 - 0×6fffffff | 16M |