am5728 平台,SD卡支持fat boot,emmc支持boot分区raw boot, uda分区 fat boot 以及 uda分区 raw boot。
boot_device boot_mode description
mmc1 (5) MMCSD_MODE_FS (2) 从SD卡的第一个fat32分区读取启动文件
mmc2 (6) MMCSD_MODE_EMMCBOOT (3) 从emmc的boot1硬件分区指定扇区读取raw数据
mmc2_2 (7) MMCSD_MODE_FS (2) 从emmc的uda硬件分区的第一个fat32分区读取启动文件
mmc2_2 (7) MMCSD_MODE_RAW (1) 从emmc的uda硬件分区的指定扇区读取raw数据
括号中的数字指源码中的宏对应的值。
1. sd卡 fat boot:第一阶段:如果MMC包含在引导设备列表中,则ROM会在第一个MMC控制器上查找SD卡。如果找到卡,则ROM然后在分区表中查找第一个FAT32分区。找
到分区后,将扫描根目录以查找名为“MLO”的特殊签名文件(该文件是x-loader二进制文件,其中包含用于加载文件的内存位置和文件大小的标头)。假设文件一切顺利,它将被转移到内部SRAM中并将控制传递给它。MMC1和MMC2都可用于启动。
第二阶段:在通过SD卡加载u-boot的情况下,SD卡x-loader在第一个MMC控制器上查找FAT32分区,并在顶级目录中扫描名为“u-boot.img”的文件。然后它将文件传输到主存储器并将控制转移到它。
2. emmc boot 分区 raw boot:
第一阶段:bootROM尝试从boot分区第0个扇区加载数据,如果扇区损坏或者空白,ROM将在退出之前尝试第0x100扇区(最多4个扇区:0x0,0x100,0x200,0x300)。一旦找到好的扇区,ROM就将内容传输到SRAM并将控制转移到它。
第二阶段:MLO从 boot分区 0x300处读取u-boot.img。
3. emmc uda分区 fat boot:
和sd卡 fat 启动一样,只不过从uda硬件分区查找fat32分区。
4. emmc uda分区raw boot:
和emmc boot分区启动一样,只不过是uda硬件分区。为了不破坏emmc的分区结构(MBR第1个扇区,GPT前34个LBA),且能正确加载uboot.img,最好把MLO烧写到0x100或0x200处,且控制MLO size 小于 0x100。
启动顺序: 1 > 2 > 3 > 4
1)设置sysboot支持SD卡启动时,如果检测到SD卡,则从sd卡启动(方式1),否则从emmc启动。
2)从emmc启动时,若定义了CONFIG_SUPPORT_EMMC_BOOT宏,然后通过 mmc partconf命令设置了从boot硬件分区启动,则先执行emmc boot分区 raw boot(方式2),找到好的扇区就将内容传输到SRAM,否则从emmc uda分区启动。
3)从emmc uda分区启动时,先进行 fat boot(方式3)从第一个fat32分区查找MLO,失败的话以raw方式启动。
4)进行emmc raw boot(方式4)。
注意:以上offset和大小单位是扇区或LBA,在am5728上是512bytes(通常也希望是这样)。