我目前正在使用的Cortex-A53大约有3个启动阶段:
到目前为止,我从串行端口打印中看到BL2初始化了DDRC和内存(我猜这是用于将BL31和BL33加载到RAM中)。以下是BL2的打印内容:
INFO: calc_freq_div, Real-Freq=2400 Mbps
INFO: ddr soft-rest...
INFO: set_fabric_interleave_mask, 1 K
INFO: ddr interleave disable
INFO: ddrc0_init...
INFO: ddr0 perf enable
INFO: [ddr_0 BIST] success!
INFO: ddr0 ecc disable
INFO: ddrc0_init end...
INFO: ddrc1 init...
INFO: ddr1000 perf enable
INFO: [ddr_1000 BIST] success!
INFO: ddr1000 ecc disable
INFO: ddrc init end...
我肯定知道系统至少具有8GiB RAM,范围从0x1:0000:0000
到0x3:0000:0000
(根据硬件规格和Linux空间)。我想从BL2的简单命令行循环中测试这些内存范围...但是看来我只能读取RAM地址的前256MiB + 640KiB(从0x1:0000:0000
到0x1:100a:0000
),如果我读取的内存地址超出此范围,则BL2会挂起。
读取内存位置的代码如下:
static inline uint32_t mmio_read_32(uintptr_t addr)
{
return *(volatile uint32_t*)addr;
}
BL2中的DDRC / MEM初始化代码对我来说有点复杂,所以我暂时不打算深入了解这些内容。我当前的问题很简单: