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.

[参考译文] PROCESSOR-SDK-AM62X:sdcard (mmc1) Boot 和 u-boot saveenv 命令

Guru**** 2539500 points
Other Parts Discussed in Thread: AM625

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1260920/processor-sdk-am62x-sdcard-mmc1-boot-and-u-boot-saveenv-command

器件型号:PROCESSOR-SDK-AM62X
主题中讨论的其他器件:AM625

尊敬的论坛:

我从事 AM625x GP 电路板工作、使用 Yocto 生成映像、并使用 uSD 卡刷写在目标板上。   这里我有几个问题。

第一个问题:

刷写后、观察到 mmcblk1p1分区(存在 uboot 文件) 安装在/run/media/mmcblk1p1上、mmcblk1p2分区(rootfs)安装在/(作为 root)上、这看起来没有问题。

但这里的问题是、 为什么 当我们用 SDcard 刷写映像时,mmcblk0p1分区以/run/media/mmcblk0p1作为 rootfs 装入?  我 是否仍要删除 mmcblk0分区或禁用 am62xx 中的 eMMC?

同样、am62xx ti-sdk-default 映像也具有相同的观察结果。

root@am62xx-evm:~# dmesg | grep mount
[1.835177] EXT4-FS (mmcblk1p2 ):已安装的文件系统与已排序的数据模式。 选项:(空)
[1.837026] devtmpfs:已安装
[ 3.124766] systemd[1]:正在开始重新装载根文件系统和内核文件系统...
[ 3.148046] EXT4-FS (mmcblk1p2 ):重新安装。 选项:(空)
[9.110743] EXT4-FS (mmcblk0p1 ):带有序数据模式的已安装文件系统。 选项:(空)
root@am62xx-EVM:~#

root@am62xx-LRD:~# lsblk
名称         MAJ:最小 RM  大小  RO 类型  安装点
mmcblk0       179:0      014.8G     0  磁盘   
`μ-mmcblk0p1   179:1      0   14.8G  0  部件   /run/media/mmcblk0p1
mmcblk0boot0 179:32    0   31.5M  1  磁盘
mmcblk0boot1 179:64    0   31.5M  1  磁盘
mmcblk1       179:96    0    7.4G 0     磁盘
|-mmcblk1p1   179:97    0   62M 0      部分   /run/media/mmcblk1p1
`-mmcblk1p2   179:98    0   7.3G 0      部件   /
根目录@am62xx-LRD:~#

第二个问题:

我使用两个分区刷写了 sdcard、一个具有小型 VFAT 分区、tiboot3.bin、tispl.bin、u-boot.img、uEnv.txt、另一个具有较大的 kernelImage、DTS 文件和 rootfs 分区格式化为 ext4。
我停止在 u-boot 提示符下引导以使用 saveenv 命令创建 uboot.env 文件。

saveenv cmd 的输出显示"环境保存到 MMC(0),但它应保存到 sdcard 的 FAT 分区(即 MMC(1)),并且不创建 uboot.env 文件。

能否解释一下、saveenv 命令在 AM62xx 目标中如何工作? 如何在存在 uEnv.txt 文件的 sdcard 中创建 uboot.env 文件?

注意:-在 AM335x 和 AM437X 等其他电路板中,saveenv 命令会将 Environment 保存到 FAT 分区中,并在显示 uEnv.txt 文件的位置创建 uboot.env 文件。  

以下命令在 u-boot 提示符处执行:-

按任意键以停止自动引导:0
=> MMC 列表
MMC@fa10000:0 (eMMC)
MMC@fa00000: 1
MMC@fa20000: 2
=>
=> printenv mmcdev
mmcdev=1
=>
=> fatls MMC 1:1
332038 tiboot3.bin
931720 tispl.bin
881588 u-boot.img
1396 uEnv.txt

4个文件、0个目录

=> saveenv
正在将环境保存到 MMC... 正在写入 MMC (0)... 确定
=>
=> fatls MMC 1:1
332038 tiboot3.bin
931720 tispl.bin
881588 u-boot.img
1396 uEnv.txt

4个文件、0个目录

=>

最后一个问题:  

引导期间,u-boot 环境中的引导命令流执行顺序是什么? 如何知道哪些 u-boot 命令 将执行第1个命令及其命令序列?

感谢您的帮助、如果需要任何澄清、请告诉我。

此致、

马利卡朱纳

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

    您好!

    1.您可以使用 fdisk 命令在 eMMC 中擦除该分区:

    fdisk /dev/mmcblk0

    然后选择"d"删除分区。

    以下文档似乎足以解释这一点: https://docs.oracle.com/cd/E88353_01/html/E72487/fdisk-8.html

    2.对于08.06 SDK 上的 AM62x、我们默认需要将 U-boot 环境保存为 eMMC。如果您要保存到 SD 卡、请尝试以下补丁、但对于 AM62x:

    diff --git a/configs/j721e_evm_a72_defconfig b/configs/j721e_evm_a72_defconfig
    index a6d3cb6866..2ea212fa17 100644
    --- a/configs/j721e_evm_a72_defconfig
    +++ b/configs/j721e_evm_a72_defconfig
    @@ -80,10 +80,11 @@ CONFIG_OF_LIST="k3-j721e-common-proc-board k3-j721e-tps65917-proc-board k3-j721e
     CONFIG_SPL_MULTI_DTB_FIT=y
     CONFIG_SPL_MULTI_DTB_FIT_NO_COMPRESSION=y
     CONFIG_ENV_OVERWRITE=y
    -CONFIG_ENV_IS_IN_MMC=y
     CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
     CONFIG_SYS_RELOC_GD_ENV_ADDR=y
    -CONFIG_SYS_MMC_ENV_PART=1
    +CONFIG_ENV_IS_NOWHERE=y
    +CONFIG_ENV_IS_IN_FAT=y
    +CONFIG_ENV_FAT_DEVICE_AND_PART="1:1"
     CONFIG_NET_RANDOM_ETHADDR=y
     CONFIG_DM=y
     CONFIG_SPL_DM=y
    diff --git a/configs/j721e_evm_r5_defconfig b/configs/j721e_evm_r5_defconfig
    index 01dadb98bf..f6620698dd 100644
    --- a/configs/j721e_evm_r5_defconfig
    +++ b/configs/j721e_evm_r5_defconfig
    @@ -68,6 +68,7 @@ CONFIG_SPL_MULTI_DTB_FIT=y
     CONFIG_SPL_OF_LIST="k3-j721e-r5-common-proc-board k3-j721e-r5-eaik"
     CONFIG_SPL_MULTI_DTB_FIT_NO_COMPRESSION=y
     CONFIG_ENV_OVERWRITE=y
    +CONFIG_ENV_IS_NOWHERE=y
     CONFIG_SYS_RELOC_GD_ENV_ADDR=y
     CONFIG_DM=y
     CONFIG_SPL_DM=y


    3.您使用的是哪种处理器 SDK? 在 u-boot 中、您只需要执行:
    =>引导
    引导器件。

    ~朱迪斯

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

    您好、TI_Expert、

    感谢您的回复、上述补丁更改、u-boot 环境保存到 FAT 分区中、以及创建到 MMC 1:1 (SDCard)的 uboot.env 文件。

    但 问题 是:
    在 uEnv.txt 文件中、我添加了一条命令、这将在加载 uEnv.txt 后设置三个变量、但在这里设置这些变量并将其存储在 uboot.env 文件中、该文件位于 SDCard (MMC1)的 FAT 分区中、而不会保存在默认的 u-boot 环境变量中。

    我希望将 uEnv.txt 命令输出保存到默认的 u-boot 环境和 FAT 分区(即 uboot.env 文件)中、因为我的目标将根据通过 uEnv.txt 文件中的命令设置的变量进行引导。 目前、该命令输出不会保存到默认的 u-boot 环境中。


    我能不能知道为什么在目标使用 SDCard 引导时 uEnv.txt 命令输出没有保存到默认 uboot 环境中? 需要对此进行哪些更改/修改?

    供您参考:-

    1) 1)请在下面找到随附的图像、使用 uboot.env 文件的 fw_printenv 命令输出和 u-boot 提示符下的 printenv 命令输出。

    2) 2)请找到 uEnv.txt 和 am62xx_boot_logs 文件的附加链接、其中在 u-boot 提示符下记录了 FW_printenv 和 printenv 命令输出。

    文件:///C/C:/Users/Ambatima/Desktop/uboot_env_issue

    此致、

    马利卡朱纳

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

    尊敬的 Mallikarjuna:

    您是否可以尝试添加:

    =>运行 envboot

    到 arge_MMC 环境变量中?

    运行 envboot 应加载"uEnv.txt"、如下所示:

    => run envboot
    switch to partitions #0, OK
    mmc1 is current device
    SD/MMC found on device 1
    Failed to load 'boot.scr'
    Failed to load 'uEnv.txt'
    => 
    


    您可以重新编译 u-boot 并更新 args_mc 环境变量、以包含"运行 envboot"。

    ~朱迪斯

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

    Judith、您好!

    envboot 命令已存在于环境中、它正在加载 uEnv.txt 文件。

    在 u-boot 中、第1个  引导 CMD_Linux 命令正在运行、它将按顺序运行以下命令

      findfdt、 envboot、 init_mc (args_all、args_mc)、 get_kern_mc、  GET_FDT_MMC、GET_OVERSE_MMC 、 run_kern (它将引导内核)。

     

    问题是:-  

    在这里、我可以加载 uEnv.txt 文件、但 在执行 saveenv 命令时、它不会在 u-boot 级别保存到默认环境、但会创建 uboot.env 文件、其中更新了 uEnv.txt 的相关更改。

    我想将与 uEnv.txt 文件相关的更改保存到 默认 u-boot 环境和 uboot.env 文件中。 对于这种情况、需要进行任何具体更改?

     

    附加链接以下载 uEnv.txt 文件和 boot_logs (其中、您可以看到 printenv 和 fw_printenv 输出)

    /cfs-file/__key/communityserver-discussions-components-files/791/6102.uEnv.txt

    /cfs-file/__key/communityserver-discussions-components-files/791/am62xx_5F00_boot_5F00_logs.txt

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

    您好!

    我是 OOO、会尽快回复。

    ~朱迪斯

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

    您好!

    您使用的是什么处理器 SDK?
     08.06?

    此外、您是否还尝试从 uEnv.txt 加载 u-boot 环境、以及将 u-boot 环境保存到 uEnv.txt?

    因此、您可以使用以下命令:

    => printenv bootenvfile
    bootenvfile= uEnv.txt
    => printenv mmcdev
    mmcdev=1


    将环境写入 SD 卡
      => env export–t $loadaddr
      => fatwrite mmc ${mmcdv}${loadaddr}${bootenvfile}${fileSize}


    从 SD 卡加载环境
      =>运行 envboot

      => fatload MMC ${mmcdv}${loadaddr}${bootenvfile}
      => env import–t ${loadaddr}${filesize}

    ~朱迪斯

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

    Judith、您好!

    是的、我们使用的是 08.06.00.003 SDK。

    我们已经使用了您上面建议的命令、

    在加载环境中、我们使用 运行 envboot 组件。  

    在这里、我将共享 am62xx SK 和 AM335x-EVM 板的 u-boot 日志、两个板都 从 SDcard 引导。

    AM335x u-boot 日志

    U-Boot SPL 2020.01-g2781231a33 (2021年3月26日- 17:56:23 +0000)
    尝试从 MMC1引导
    U-Boot 2020.01-g2781231a33 (2021年3月26日- 17:56:23 +0000)
    CPU:AM335X-CPU 2.1版 GP
    型号:TI AM335x EVM
    DRAM:1 GiB
    WDT:服务开始(60秒超时)
    NAND:0 MiB
    MMC:OMAP SD/MMC:0
    正在从 FAT 中加载环境... 确定
    NET:eth0:以太网@4a100000
    警告:USB_ether MAC 地址不匹配:
    ROM 中的地址为 de:ad:be:ef:00:01
    环境中的地址为0c:1c:57:08:28:fb、eth1:usb_ether
    按任意键以停止自动引导:0
    切换到分区#0,确定
    mmc0是当前器件
    在器件0上找到 SD/MMC
    1396字节读取、以4ms (340.8 KiB/s)
    从 uEnv.txt 加载 env
    正在从 mmc0导入环境...
    切换到分区#0,确定
    mmc0是当前器件
    正在扫描 MMC 0:1...
    切换到分区#0,确定
    mmc0是当前器件
    在器件0上找到 SD/MMC
    ROOTFS_B 存在
    正在将环境保存到 FAT... 确定
    5427712字节读取、353ms (14.7MiB/s)
    95597字节、在13ms (7MiB/s)内读取
    ##平展设备树 Blob、88000000
    在0x88000000使用 FDT Blob 引导
    将设备树加载到8ffe5000,结尾8ff56c ...确定

    AM62xx u-boot 日志

    U-Boot 2021.01-g999 (8月25 2023 - 13:35:48 +0000)

    SoC:AM62X SR1.0 GP
    型号:Texas Instruments AM625 SK
    EEPROM 在0x50处不可用、尝试在0x51处读取
    电路板:AM62-SKEVM 修订版 E3
    DRAM:2 GiB
    MMC@fa10000: 0, MMC@fa00000: 1, MMC@fa20000: 2
    输入:串行@2800000
    输出:串行@2800000
    ERR:串行@2800000
    NET:eth0:以太网@8000000port@1
    按任意键以停止自动引导:0
    切换到分区#0,确定
    mmc1是当前器件
    在器件1上找到 SD/MMC
    加载"boot.scr"失败
    1671字节在3ms (543.9 KiB/s)内读取
    从 uEnv.txt 加载 env
    正在从 mmc1导入环境...
    正在将环境保存到 FAT... 确定
    19567104字节、410毫秒(45.5 MiB/s)内读取
    59144字节、在5ms (11.3MiB/s)内读取
    ##平展设备树 Blob、88000000
    在0x88000000使用 FDT Blob 引导
    正在将设备树加载到000000008feee000,结束00008fffff...确定

    以上 u-boot 日志的观察结果:-

    在 AM335x 中、 环境会保存 到 FAT 分区中、而在引导时、环境会从 FAT 分区加载我们使用 uEnv.txt 保存的任何内容。

    其中、 在 am62xx 中、 环境保存 到 FAT 分区中、但在引导时、环境不会从 FAT 分区加载。

     

    问题:

    那么、在 am62xx 中、要在像 AM335x 一样引导的同时从 FAT 分区加载、 需要进行哪些更改或任何 u-boot 配置更改?

    请参阅上述 AM335x 和 am62xx SK 板的共享 u-boot 日志。

    谢谢。此致、

    Mallikarjuna Reddy Ambati.