Edit online

SPL 阶段

1. SPL 的内存分配
地址范围 存放内容 说明
0x00103000 ~ 0x00115F00 SPL 初始栈空间 0x00118000 是配置的栈顶位置,但实际上运行的时候,需要预留 HEAP 空间和 GD 全局变量的空间,因此实际的栈顶地址是 0x00115F00

配置:CONFIG_SPL_STACK, rch/riscv/cpu/start.S

位置:include/configs/aic1602.h

0x00115F00 ~ 0x00116000 Global Data GD 全局变量的初始空间
0x00116000 ~ 0x00118000 HEAP 初始 HEAP 的空间

配置:CONFIG_SYS_MALLOC_F_LEN

位置:Kconfig

0x40000000 ~ 0x42000000 Kernel SPL 直接启动 Kernel 时使用,从 U-Boot 启动时不用

配置:its

位置:kernel.its

0x40004000 ~ 0x41000000 U-Boot SPL 启动 U-Boot 时使用,直接启动 Kernel 时不用,预留约 16MB

配置:its

位置:u-boot.its

0x42000000 ~ 0x42000100 SPL AIC 信息头 SPL 的 AIC 头信息
0x42000100 ~ 0x42020000 SPL bin 0x42000100 是 SPL 的程序入口地址,SPL 大小不应该超过 128KB

配置:CONFIG_SPL_TEXT_BASE, image_cfg.json

位置:common/spl/Kconfig

0x42200000 ~ 0x42300000 SPL STACK 1MB, 初始栈太小,在 board_r 之后切换到新的栈运行配置:CONFIG_SPL_STACK_R_ADDR - CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN 预留完 Simple heap 之后,剩下的空间给 Stack位置:Kconfig
0x42300000 ~ 0x43F00000 SPL heap 28MB在 SPL board_r 初始化 CONFIG_SYS_SPL_MALLOC_START 之前使用AIC1602 不会定义 CONFIG_SYS_SPL_MALLOC_START,只用 Simple Heap

配置:CONFIG_SPL_STACK_R_ADDR =0x43F00000

配置:CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN = 0x1C000000,28MB

位置:Kconfig

0x43F00000 ~ 0x43F20000 Falcon 模式参数 SPL Falcon 模式才需要,所需空间不大

配置:CONFIG_SYS_SPL_ARGS_ADDR

位置:include/configs/aic1602.h

0x43FE0000 ~ 0x44000000 OpenSBI 配置:CONFIG_SPL_OPENSBI_LOAD_ADDR

位置:Kconfig

2. USB 升级时下载地址
地址范围 存放内容 说明
0x40000000 ~ 0x41000000 SPL SPL 的下载地址,运行起来时会被搬运到指定的链接位置

配置:image_cfg.json

0x41000000 ~ 0x41100000 env.bin 存放启动升级程序(U-Boot)所用的环境变量,由于升级时不会直接运行 Kernel,因此与上面的 Kernel 地址空间不冲突

配置:CONFIG_ENV_RAM_ADDR, image_cfg.json

位置:env/Kconfig

0x41100000 ~ 0x42000000 uboot.itb 存放升级程序

配置:CONFIG_SPL_LOAD_FIT_ADDRESS, image_cfg.json

位置:Kconfig