启动流程介绍

Version 1.0


1. Spi nor flash启动

芯片从spi nor flash启动的流程:

graph LR;
A(Rom code)
B(IPL)
C(IPL_CUST)
D(Uboot)
E(Kernel)
A-->B-->C-->D-->E

芯片上电后从Rom code跳到IPL,IPL运行起来后从指定位置读取MXPT(分区表),再根据分区信息顺序加载运行IPL_CUST、Uboot等。


2. Spi nand flash启动

芯片从spi nand flash启动的流程:

graph LR;
A(Rom code)
B(GCSI)
C(IPL)
D(IPL_CUST)
E(Uboot)
A-->B-->C-->D-->E
  • Rom Stage: Load GCIS, CIS have backup 10 blocks; Load IPL, if read badblock, read IPL_bak

  • IPL Stage: Load IPL_CUST, if read badblock, read IPL_CUST_backup

  • IPL_CUST: Load U-boot, if read badblock, read U-boot backup

  • U-boot: Load kernel, if read ECC/CRC32/decompress failed, read kernel backup

  • Kernel: mount Filesystem(SQfs+UBIfs), UBI have wear-leveling management and bad block management

注:第四步骤的ECC 是指 spi-nand flash 本身的ecc校验。我们平台目前不做ecc。


3. EMMC启动

芯片从EMMC启动的流程:

graph LR;
A(Rom code)
B(IPLX)
C(Uboot)
D(Kernel)
A-->B-->C-->D

使用EMMC作为启动设备时,我们会使用到EMMC的两个分区

Partition Content
Boot 1 IPLX及Uboot合并成BOOT_PART.bin,放在Boot 1分区
UDA 分区表、内核及rootfs等其他数据

上电后Rom code从Boot 1分区读取到IPLX及Uboot,Uboot运行起来之后切换到UDA分区。Uboot从分区头部读取到分区表,再根据分区表依次启动kernel、挂载rootfs等。