1、基本流程
下载流程
-BootRom 与
下载工具交互建立通路,并下载FDL1到IRAM运行
-FDL1初始化DDR,并与工具交互,将FDL2下载到DDR,并运行
-FDL2与工具交互,下载其它image到Flash
下载流程
-用BootRom 校验SPL 的Image 安全性并加载启动
-用SPL 校验U-Boot 的安全性并加载启动
-用U-Boot 校验
linux 的安全性并加载启动
2、运行级别
3、内存布局
系统硬件资源规划一般在项目初期就已经确定,对于DDR的地址空间使用规划举例如上图所示。在bootloader阶段,
Uboot可以直接使用除安全限制外(SML/Tos)其它ddr地址空间。分配规则定义在内 部dts里。如左图所示,
模块可以在代码中,获取并直接使用,方式举例如下:
unsigned long buf_base, buf_size;
get_buffer_base_size_from_dt(“heap@8”, &buf_base, &buf_size); //heap 8对应logbuffer节点,地址空间范围[0x82000000, 0x8204FFFF]
Uboot自身运行空间,规划如上图所示。基本源用社区方案,未做改动。提供malloc/free动态内存申请
接口。所使用的堆大小,由于全局的运行空间规划限制,通常会定义的比较小些,具体定义参见:
include/configs/<board>.h
/* Size of malloc() pool */
#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 3 * 1024 * 1024)
4、软件架构
软件架构(con’t)--初始化(1)
●底层板级初始化,分为如下3个阶段:
- Lowlevel Init, 主要完成cache使能及栈设置等
SOC底层初始化,由汇编来完成。
- Init_f,c代码,完成部分外围(如timer、serial等)初始化,并重定位代码段,并清空bss,初始化全局变量gd,重新设置堆栈等,为后面运行创造完整的c运行环境。
- Init_r,c代码,完成外围设备初始化,调用展锐私有初始化接口(board_init\board_late_init)
更多详细内容请下载附件查看