启动流程介绍
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等。