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.

[参考译文] AM6422:在 boot.cmd 文件中、在 U-Boot 加载程序中运行 MMC 命令时无法正确设置

Guru**** 2465890 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1475179/am6422-in-the-boot-cmd-file-mmc-commands-are-not-set-correctly-when-run-in-the-u-boot-loader

器件型号:AM6422
Thread 中讨论的其他器件:CSD

工具与软件:

尊敬的 TI 支持团队:

我需要在 U-Boot 加载程序中运行` mc partconf `m和` mc bootbus `m命令、以确保 eMMC 引导分区处于活动状态并可访问。 我已经尝试将这些命令添加到`boot.cmd`文件中、并生成`boot.scr`文件。 不过、这些值似乎没有在 U-Boot 加载程序中正确设置。 如果我遗漏了什么内容、可以告诉我吗?

仅供参考、我已尝试在 uENV.txt 文件中添加以下命令、但仍然遇到同样的问题。

在 boot.cmd 文件中添加了命令:

# MMC 设备选择
mmcdev=0

#设置引导分区和总线配置
bootcmd=mmc dev ${mmcdev};mmc partconf 0 1 1;mmc bootbus 0 2 0 0;

命令 : mkimage -a arm -T script -C none -n "Boot Script"-d /mnt/boot.cmd /mnt/boot.scr

U-boot 结果:

=> MMC partconf 0
EXT_CSD[179]、PARTITION_CONFIG:
BOOT_ACK:0x0
BOOT_PARTITION_ENABLE:0x0
PARTITION_ACCESS:0x0
=>

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

    您好!

    此外、我已经尝试在 board/ti/am64x 目录下的 am64x.env 文件中包含`mmc partconf`和`mmc bootbus`命令、如下所示。 在 U-Boot 加载过程中、MMC 值设置正确;然而、系统会停止加载并无法加载内核映像和其他组件、如错误快照中所示。

    错误:

    此致、Kalyan

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

    您好!

    这些命令只需运行一次。  因此、您可能不需要将它们添加到任何地方、就可以在每次自动运行它们。

    谢谢!

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

    Prashant、您好!

    感谢您的响应。 我同意、但最终产品不会有串行控制台。 因此、我需要在不使用 u-boot 控制台的情况下运行这些命令一次。 请`M我需要在何处添加或运行"mmc partconf`"和"mc boot bus`"命令。

    此致、Kalyan

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

    您应该在生产中的闪存期间对 PARTCONF 和 BOOTBUS 进行编程。 您可以将这些命令附加到用于通过 A53 U-Boot 进行刷写的命令。

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

    感谢快速响应。 您能否提供有关在何处添加这些命令的更多详细信息、例如 U-Boot 加载程序中的文件名(board.c)或环境(am64x.env)?

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

    您当前如何将 U-Boot 映像刷写到 eMMC?

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

    我正在使用 dd 命令将 U-Boot 映像二进制文件写入/刷写到 eMMC boot0分区。 我通过 SD 卡在运行的 Linux 上执行这些命令。

    echo 0 >/sys/block/mmcblk0boot0/force_ro
    DD if=/home/root/kalyan/emmc_boot_images/tiboot3.bin of=/dev/mmcblk0boot0 seek=0
    DD if=/home/root/kalyan/emmc_boot_images/tispl.bin of=/dev/mmcblk0boot0 seek=2048    
    DD if=/home/root/kalyan/emmc_boot_images/u-boot.img of=/dev/mmcblk0boot0 seek=6144

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在从 SD 卡运行的 Linux 上执行这些命令。

    这意味着您可以访问 UART 控制台。 您可以引导至 A53 U-Boot 并运行一次这些命令。

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

    我已经编写了一个对 eMMC 进行分区和格式化的脚本、并在 eMMC 上更新 u-boot、内核映像和根文件系统。 此脚本将在 Linux 操作系统的启动过程中作为启动服务运行。

    所有必要的文件(包括 u-boot、内核映像、引导文件系统和脚本文件)都打包在 SD 卡的引导文件系统映像中。 请务必注意、用户和我都无法访问 UART 控制台 . 因此、我必须仅使用 SD 卡更新 eMMC 上的固件。 eMMC 上的固件更新成功后、我将移除 SD 卡。

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

    在这种情况下、您可以编辑 uEnv.txt 文件并将命令保存到"uenvcmd"变量、如下所示:

    root@am64xx-evm:/run/media/boot-mmcblk1p1# cat uEnv.txt
    # This uEnv.txt file can contain additional environment settings that you
    # want to set in U-Boot at boot time.  This can be simple variables such
    # as the serverip or custom variables.  The format of this file is:
    #    variable=value
    # NOTE: This file will be evaluated after the bootcmd is run and the
    #       bootcmd must be set to load this file if it exists (this is the
    #       default on all newer U-Boot images.  This also means that some
    #       variables such as bootdelay cannot be changed by this file since
    #       it is not evaluated until the bootcmd is run.
    
    uenvcmd=mmc dev 0;mmc partconf 0 1 1 1;mmc bootbus 0 2 0 0
    
    root@am64xx-evm:/run/media/boot-mmcblk1p1#

    A53 U-Boot 引导 Linux 过程旨在导入 uEnv.txt 文件、并在"uenvcmd"变量中运行找到的命令。

    附件为日志:

    Hit any key to stop autoboot:  0
    switch to partitions #0, OK
    mmc1 is current device
    SD/MMC found on device 1
    635 bytes read in 41 ms (14.6 KiB/s)
    Loaded env from uEnv.txt
    Importing environment from mmc1 ...
    Running uenvcmd ...
    switch to partitions #0, OK
    mmc0(part 0) is current device
    Set to BOOT_BUS_WIDTH = 0x2, RESET = 0x0, BOOT_MODE = 0x0
    21029376 bytes read in 870 ms (23.1 MiB/s)
    64721 bytes read in 46 ms (1.3 MiB/s)
    Working FDT set to 88000000
    ## Flattened Device Tree blob at 88000000
       Booting using the fdt blob at 0x88000000
    Working FDT set to 88000000
       Loading Device Tree to 000000008feed000, end 000000008fffffff ... OK
    Working FDT set to 8feed000
    
    Starting kernel ...

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

    Prashant、您好!

    感谢您提供解决方案和快速响应。 如您所建议的那样、在 uENV.txt 文件中添加 partconf 和 bootbus MMC 命令作为 uenvcmd 变量后、值现在已按预期正确设置。

    此致、Kalyan