君正X2000开发板试用体验之二:君正X2000引导过程分析
X2000内部集成了32KB Boot ROM,CPU上电复位后先执行Boot ROM中的程序。
X2000芯片上的三个引脚 BOOT_SEL0, BOOT_SEL1, BOOT_SEL2 决定了X2000的启动方式。
默认情况下,开发板的CON1和CON2两个跳线帽连接2-3插针,把BOOT_SEL0和BOOT_SEL2通过下拉电阻接地,因此默认的启动方式为SFC0@PE3.3V;如果将两个跳线帽连接1-2插针,
把BOOT_SEL0和BOOT_SEL2上拉至1.8V,则启动方式可以更改为MSC0@PD1.8V。
CPU启动时,首先执行Boot ROM中的代码,引导程序进行一些基本的初始化动作(主要是SPI控制器初始化)之后,将SPI Flash上的辅助程序装载器(Secondary Program Loader, SPL)装入SRAM中。X2000中集成了32K SRAM,其地址范围为0xB2400000 ~ 0xB2408000。
SRAM的内存布局如上图所示,其中开头的4K用于堆栈和数据空间。因此引导程序会跳转到0xb2401000处开始执行SPL代码。spl signature (512B)用于存储启动类型信息,随后的 sc boot keys (1.5K)用于安全引导,spl.text(不到22K,512字节对齐)是真正的代码段。
之所以需要SPL,是因为SRAM数量有限(X2000只有32KB),通常uboot可执行文件的大小远远大于SRAM大小,而此时DRAM尚未初始化,因而DRAM不可用。SPL将初始化DRAM,将uboot装入内存并跳转去执行。
启动顺序大体上是:
Boot ROM --> SPL --> uboot --> kernel
类似于X86 PC的启动顺序:
BIOS --> MBR --> GRUB --> kernel