This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM57X:引导顺序问题

Guru**** 2933120 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/630662/am57x-boot-sequence-question

大家好

 AM57XX 外设首选引导顺序似乎很奇怪。

sysboot[5:0]= 0b000010、这意味着引导顺序是 USB 优先、SD 第二和 EMMC 第三。

我想从 SD 和 EMMC 引导、如果 SD 失败、它从 EMMC 引导、USB 不会被连接。

当我从 SD 和 EMMC 个人测试引导时、情况良好。

当两者都包含引导代码时、SD 位于 EMMC 之前。

但是、当我测试从 EMMC 引导、然后插入一个空的 SD 卡(SD 卡只包含一个 FAT32分区、所有数据为0)。

它无法从 EMMC 引导、似乎从 SD 引导的死循环、 在移除 SD 时、它从 EMMC 引导。

有什么建议吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请阅读 AM572x TRM 修订版 I 的33.3.7.6节、其中详细介绍了 eMMC/SD 引导过程。 ROM 代码可能会将 SD 卡识别为有效的引导源并在此处停止。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    根据33.3.7.6、它需要具有活动(引导) FAT 分区并包含文件名"MLO"的 SD 卡。

    但我使用的 SD 卡是一个空卡、具有 FAT 分区、但没有活动的卡、也没有文件。

    那么、为什么 ROM 代码会将其视为有效的引导源?

    根据图33-24、33-29、33-30、如果未找到活动分区或未找到引导文件、则会失败。

    我进行测试:
    (1)在窗口中格式化 SD 卡、并将有效的 MLO、u-boot.img 文件复制到中。
    (2)但使用 SD 无法启动电路板(因为 Windows 格式化板未将分区设置为活动)、而且也不会从 eMMC 引导。
    (3)并转到 Linux、使用 parted cmd 将 SD 卡分区切换为引导。
    (4)现在、SD 卡可以启动板。

    这意味着、如果 SD 卡包含 FAT 分区(即使不是活动分区且没有 MLO)、ROM 代码将识别为有效的引导源、trys 始终且永不失败?

    有效启动源的判断仅由 FAT 决定?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已要求工厂团队提供其他意见。 他们将在这里发布。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、工厂团队是否提供了任何信息?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    所发生的情况是、一旦 ROM 找不到正确的引导文件、ROM 就会假定该卡是在原始模式下格式化的。  然后 ROM 查找有效的 TOC 结构("有效"表示第一个位置不是0x00000000或0xFFFFFFFF)。  由于格式化的卡在前几个位置(ROM 检索 TOC)具有除0x0以外的数据或所有 FS、ROM 认为这是有效的 TOC 并尝试引导、然后失败。   ROM 不会移动到下一个引导源、因为 TOC 结构检查已通过。

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这种判断似乎很奇怪。

    您是说、如果第一个位置不是0x00000000或0xFFFFFFFF、从不失败?

    ROM 代码检查 SD 作为有效的原始模式、但格式化的卡不应是有效的原始卡、并且无法定位 MLO 文件。

    如果引导失败、为什么不转至下一个引导设备?

    这意味着、如果我需要引导序列:SD 优先(如果 eMMC 失败、我可以从 SD 引导以救援 eMMC。) 然后是 EMMC、希望使用 EMMC 作为系统、SD 作为存储。 我应该将 SD 卡格式化为已激活的 FAT 分区、但不包含任何引导文件?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正确、如果第一个位置不是0x0或0xFFFFFFFF、则引导将失败、但不会转到下一个引导设备。 您必须在 ROM 希望找到原始模式映像的四个连续位置中的每个位置都有这些值之一、否则它将假定映像有效。

    此致、
    James
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    sysboot[5:0]= 0b000010、这意味着引导顺序是 USB 优先、SD 第二和 EMMC 第三。

    我需要引导序列:先引导 SD (如果 eMMC 失败、我可以从 SD 引导以救援 eMMC。) EMMC 其次、通常需要使用 EMMC 作为系统、SD 作为存储。

    我将 SD 卡格式化为 激活的 FAT32分区,但没有引导文件。

    但同样、当 SD 卡存在时、系统无法启动。

    我该怎么做?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    主要问题是格式化的 SD 卡在第一个扇区的第一个位置将有一个除0x0或0xFFFFFFFF 以外的值。 当 ROM 在 FAT 分区中找不到有效的引导文件时、它将以 RAW 模式检查卡、此时由于第一个扇区中的第一个位置、引导将失败。
    您必须创建一个格式化卡、在原始模式下检查冗余映像的所有扇区的第一个位置具有0x0或0xFFFFFFFF (即扇区(地址):0x0 (0 KiB)、0x20000 (128 KiB) 0x40000 (256 KiB)、0x60000 (384 KiB)。

    此致、
    James
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在与同事讨论这一点时、无法使用格式化的卡并更改第一个扇区前几个位置的主引导记录。 这将损坏 MBR。
    因此、我可以建议的唯一权变措施是某种 H/W 按钮或开关、它会根据您是要从 SD 引导还是从 eMMC 引导来更改引导顺序。

    此致、
    James
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Jinhu,我能够解锁这篇文章。

    看起来、另一张海报为您提供了解决方案。

    这是该帖子的文本。  请尝试此操作以查看它是否能解决您的问题

    当您使用 parted 而不是 fdisk 格式化 SD 卡时、parted 会在第一个位置放置额外的数据、以便 ROM 引导加载程序假定该卡是以原始模式格式化的。 要退出该情况、只需运行 sudo dd if=/dev/zero of=/dev/sdX bs=4 count=1命令将这些数据归零、引导将跳转到 eMMC。

    以下是更多详细信息:

    使用时 /bin/create-sdcard.sh 要创建 SD 卡、它使用 parted 命令格式化 SD 卡、该 SD 卡将额外的数据放在第一个位置0x000000:

     

    的代码片段 /bin/create-sdcard.sh

    ############################################################################################################################

          现在制作2个分区

    ############################################################################################################################

    EOM
    DD if=/dev/zero of=$drive BS=1024 count=1024

    size=`fdisk -l $drive | grep Disk | awk '{print $5}'`

    回显磁盘大小-$size 字节

    parted -s $drive mklabel msdos
    parted -s $drive unit cyl mkpart primary FAT32 -- 0 9
    parted -s $drive set 1 boot on
    parted -s $drive unit cyl mkpart primary ext2 --9-2

    Cat << EOM



    //--------------------------------------------------------------

     

    sudo hexdump /dev/sdb -n 16.

    0000000 b8fa 1000 d08e 00bc b8b0 0000 d88e c08e

     

    当我们使用 fdisk 通过这些命令格式化 SD 卡时,第一个位置0x000000为空:

     

    sudo fdisk /dev/sdb

    类型: 
    1. p -打印分区表 
    2. o -创建新的空 DOS 分区表 
    3. p -打印分区表 
    4. n -添加新分区 
    5. P -初级 
    6.1-默认值 
    7.2048-默认值 
    8. 145407 -部门 
    9. t-更改分区类型 
    10.c - W95 FAT32 (LBA) 
    11. p -打印分区表 
    12. A -切换可引导标志 
    13.P -打印分区表 
    14. n -添加新分区 
    15。按4次 Enter 并采用默认值 
    16. p -打印分区表 
    17. W -将表写入磁盘并退出 

    sudo mkfs.vfat /dev/sdb1

    sudo mkfs.ext3 /dev/sdb2

     

    sudo hexdump /dev/sdb -n 16.

     

    0000000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

     

    因此、如果您使用 /bin/create-sdcard.sh 要创建 SD 卡、切换到 eMMC 将失败。
    如果您使用 fdisk 格式化 SD 卡、如果在 SD 卡的第一个分区上找不到 MLO、ROM 引导加载程序将跳转到 eMMC。

    您可以使用此命令 sudo dd if=/dev/zero of=/dev/sdb bs=4 count=1将输入的额外数据归零 /bin/create-sdcard.sh parted


    谢谢、

    James