TI中文支持网
TI专业的中文技术问题搜集分享网站

解决AM335 u-boot 2013.10 SD卡不能启动u-boot的bug

使用create-sdcard.sh进行分区,分区后boot分区大小为72M

复制MLO和u-boot到SD卡中,启动时打印:

boot from SD card…spl: fat register err – -1

检查u-boot源码发现,fat注册的代码有bug

首先确保Ti_armv7_common.h (include\configs)中,sd卡分区号定义如下:

/* FAT sd card locations. */
#define CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION    1               //不能定义为0,否则当SD卡存在MBR就不能加载FAT。
#define CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME    "u-boot.img"

再看

int fat_register_device(block_dev_desc_t *dev_desc, int part_no)
{
    disk_partition_t info;

    /* First close any currently found FAT filesystem */
    cur_dev = NULL;

    /* Read the partition table, if present */
    // get_partition_info( ,0 , )
    if (get_partition_info(dev_desc, part_no, &info)) {
        printf("get_partition_info(dev_desc, part_no, &info) failed\n");//richard
//        if (part_no != 0) {
//            printf("** Partition %d not valid on device %d **\n",
//                    part_no, dev_desc->dev);
//            return -1;
//        }

        info.start = 0;
        info.size = dev_desc->lba;
        info.blksz = dev_desc->blksz;
        info.name[0] = 0;
        info.type[0] = 0;
        info.bootable = 0;
#ifdef CONFIG_PARTITION_UUIDS
        info.uuid[0] = 0;
#endif
    }

    return fat_set_blk_dev(dev_desc, &info);
}

我把红色代码注释掉了,如果不注释掉,当SD卡不存在MBR时(即SD卡此时作为超级软盘),当执行if (get_partition_info(dev_desc, part_no, &info)分支时就会直接返回错误,串口打印spl: fat register err – -1错误。

而注释掉红色代码后,如果SD卡不存在MBR,就会执行fat_set_blk_dev,检查0号扇区上的DBR,这时SD卡就能启动了。此时不管你的SD卡之前是用什么工具格式化的,都能正常启动u-boot了。

后来看了2015.04的代码,denx依然没有修复这个bug。

Jian Zhou:

请问您是在TI的demo板上还是自己的板子上测试的?我们在demo板上测试过没发现类似问题啊

leo chen:

感谢提供这么好的文档,可以进FAQ了

赞(0)
未经允许不得转载:TI中文支持网 » 解决AM335 u-boot 2013.10 SD卡不能启动u-boot的bug
分享到: 更多 (0)