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.

[FAQ] [参考译文] [FAQ] AM625:如何在 AM62x 上使用 eMMC 引导模式进行引导

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1233869/faq-am625-how-to-boot-with-emmc-boot-mode-on-am62x

器件型号:AM625

此常见问题解答展示了如何在 AM62x 上使用 eMMC 引导模式进行引导。

由于 AM62x 上 eMMC 引导模式最近出现了一些问题、例如:
-在 Linux 内核中将 rootfs 刷写到 eMMC UDA 分区时出错
-从 eMMC 硬件 boot0分区引导时出错(未找到 tispl.bin )
-在刷写到 eMMC 硬件 boot0分区后,无法保存到 U-boot 环境中

此常见问题解答将介绍如何修复这些问题以及如何在 AM62x 上使用 eMMC 引导模式进行引导。 假设我们将 U-boot bootloader 二进制文件刷写到 eMMC 硬件 boot0分区、并将 rootfs 刷写到 eMMC 上的用户分区(UDA 处于 FS 模式)。

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

    1.使用以下 eMMC 补丁重新编译 U-boot:

    diff --git a/arch/arm/mach-k3/am625_init.c b/arch/arm/mach-k3/am625_init.c
    index d103c73770..4f54eeff82 100644
    --- a/arch/arm/mach-k3/am625_init.c
    +++ b/arch/arm/mach-k3/am625_init.c
    @@ -25,6 +25,9 @@
     #define K3RTC_KICK0_UNLOCK_VALUE       0x83e70b13
     #define K3RTC_KICK1_UNLOCK_VALUE       0x95a4f1e0
     
    +/*eMMC boot mode fix*/
    +#define EMMC_BOOT      9
    +
     #if defined(CONFIG_SPL_BUILD)
     
     /*
    @@ -245,6 +248,10 @@ u32 spl_mmc_boot_mode(const u32 boot_device)
     
            switch (boot_device) {
            case BOOT_DEVICE_MMC1:
    +               if (((devstat & MAIN_DEVSTAT_PRIMARY_BOOTMODE_MASK) >>
    +                     MAIN_DEVSTAT_PRIMARY_BOOTMODE_SHIFT) == EMMC_BOOT)
    +                       return MMCSD_MODE_EMMCBOOT;
    +
                    if ((bootmode_cfg & MAIN_DEVSTAT_PRIMARY_MMC_FS_RAW_MASK) >>
                         MAIN_DEVSTAT_PRIMARY_MMC_FS_RAW_SHIFT)
                            return MMCSD_MODE_EMMCBOOT;
    diff --git a/configs/am62x_evm_a53_defconfig b/configs/am62x_evm_a53_defconfig
    index d9bf9a5b7d..577fdaf1ac 100644
    --- a/configs/am62x_evm_a53_defconfig
    +++ b/configs/am62x_evm_a53_defconfig
    @@ -82,7 +82,7 @@ CONFIG_MULTI_DTB_FIT=y
     CONFIG_SPL_MULTI_DTB_FIT=y
     CONFIG_SPL_MULTI_DTB_FIT_NO_COMPRESSION=y
     CONFIG_ENV_IS_IN_MMC=y
    -CONFIG_SYS_MMC_ENV_PART=1
    +CONFIG_SYS_MMC_ENV_PART=2
     CONFIG_NET_RANDOM_ETHADDR=y
     CONFIG_DM=y
     CONFIG_SPL_DM=y

    该补丁修复了 U-boot 中的 eMMC 引导、并允许我们在将 U-boot 二进制文件刷写到 eMMC 硬件分区 boot0后保存到 U-boot 环境中。

    2.在 Linux 内核中,使用以下补丁重建 DTB:

    diff --git a/arch/arm64/boot/dts/ti/k3-am62-main.dtsi b/arch/arm64/boot/dts/ti/k3-am62-main.dtsi
    index b4051afb0a4e..c1078cd9fb7e 100644
    --- a/arch/arm64/boot/dts/ti/k3-am62-main.dtsi
    +++ b/arch/arm64/boot/dts/ti/k3-am62-main.dtsi
    @@ -409,12 +409,11 @@ sdhci0: mmc@fa10000 {
                    bus-width = <8>;
                    ti,clkbuf-sel = <0x7>;
                    ti,otap-del-sel-legacy = <0x0>;
    -               ti,otap-del-sel-mmc-hs = <0x0>;
    -               ti,otap-del-sel-ddr52 = <0x5>;
    -               ti,otap-del-sel-hs200 = <0x5>;
                    ti,itap-del-sel-legacy = <0xa>;
                    ti,itap-del-sel-mmc-hs = <0x1>;
                    status = "disabled";
    +               /delete-property/mmc-ddr-1_8v;
    +               /delete-property/mmc-hs200-1_8v;
            };
     
            sdhci1: mmc@fa00000 {


    此补丁将 Linux 内核中的 eMMC 速度降低到"高速"、使我们能够将 rootfs 刷写到 Linux 内核中的 UDA 分区。 由于 AM62x 上的 MMC 器件存在稳定性问题、因此需要执行此步骤。 TI 工程师正在进行中的调试、但现在降低 MMC 速度应该允许我们使用 eMMC 引导模式进行引导。

    构建 U-boot 后、将"tiboot3.bin"、"tispl.bin"和"U-boot.img"复制到 SD 卡"boot"分区、我们将使用该分区引导 AM62x 板并验证我们构建的二进制文件是否正常工作。 构建 DTB 后、复制到 SD 卡/root/boot 分区。

    在 Linux 内核上、使用以下命令验证 eMMC 速度是否为"高速":

    root@am62xx-evm:~# sudo dmesg | grep mmc0
    [    2.987790] mmc0: CQHCI version 5.10
    [    3.033168] mmc0: SDHCI controller on fa10000.mmc [fa10000.mmc] using ADMA 64-bit
    [    3.118174] mmc0: Command Queue Engine enabled
    [    3.122685] mmc0: new high speed MMC card at address 0001


    现在、我们可以按照 AM62x Linux Academy 中的说明进行刷写、并从 AM62x 上的 eMMC 引导: https://dev.ti.com/tirex/explore/node?node=A__AHRrRyaBVyh3lIzvQ8a6tQ__linux_academy_am62x__XaWts8R__LATEST



    其他信息:

    eMMC 引导模式开关设置如图所示、更多信息可在 TRM 第5.3节"引导模式引脚"中找到。
    - eMMC 引导 b3:b9 1001000

    ~ Judith