【问题标题】:U-boot environment is not the same as Linux "fw_printenv"U-boot环境与Linux“fw_printenv”不一样
【发布时间】:2020-02-20 11:26:07
【问题描述】:

我使用 yocto 使用 meta-tegra 层为我的 Jetson Nano 构建了一个图像。

此版本使用 u-boot 作为引导加载程序,它被设置为将环境保存在 MMC 分区 (mmcblk0p14) 上。

gdisk -l /dev/mmcblk0 显示如下:

Number  Start (sector)    End (sector)  Size       Code  Name
...
  14        20996096        20998143   1024.0 KiB  8300  UBOOTENV
...

扇区大小为 512。

然后我将u-boot-tegra/include/configs/p3450-porg.h 配置为:

...
/* Env is located in it's own partition */
#define CONFIG_ENV_IS_IN_MMC
#define CONFIG_SYS_MMC_ENV_DEV      1
#define CONFIG_ENV_OFFSET       (20996096 * 512)
...

其中CONFIG_ENV_OFFSET = Start_Sector * Block_Size

当我使用saveenv 时,环境已成功保存到 MMC,因此效果很好(据我所知)。

但是,我在 u-boot shell 中打印它时得到的环境与我使用 fw_printenv u-boot 工具打印环境时得到的环境不同。我已将/etc/fw_env.config 设置为:

# Device name   Device offset   Env size
/dev/mmcblk0p14       0          0x2000

所以我收集到的是,fw_env.config 设置错误或 u-boot 环境保存在 MMC 上的其他位置,没有分区 14。

有人对我可以尝试什么有建议吗?

**************************************************** ******编辑:****************************************** ***********

执行 dd if=/dev/mmcblk0p14 of=tmp.txt 并读取 tmp.txt 文件显示了 fw_printenv 显示的环境,而不是我在 u-boot shell 中看到的环境。

所以u-boot-tegra/include/configs/p3450-porg.h 配置中一定有问题。我只是想知道当我执行saveenv 时它实际上将环境写入何处...

知道我可以尝试改变什么吗?

【问题讨论】:

  • 您能否在 U-Boot 中包含从开机到“printenv”的完整控制台日志?谢谢!
  • 很遗憾,我现在无法提供控制台日志,因为我正在同一张 SD 卡上尝试新的分区方案。来自 meta-tegra 层的维护者:“查看 U-Boot 源 (common/env_mmc.c),偏移量是 32 位无符号整数,因此任何超过 4GiB 的偏移量都不起作用非常好。” 话虽如此,我正在尝试使用 uboot 分区作为 p1 而不是 p14 构建一个新映像并重试。如果问题仍然存在,我将使用完整的控制台日志更新问题。谢谢!
  • 看来这实际上是问题所在!

标签: yocto u-boot nvidia-jetson nvidia-jetson-nano


【解决方案1】:

正如问题的 cmets 所述,偏移量是一个 32 位整数,因此试图给它的值超过 4,294,967,295(即 20996096 * 512)是行不通的。

为了解决这个问题,我重新安排了我的分区方案,将我的 uboot 环境分区作为分区 1 而不是 14,并相应地更改了 fw_env.configp3450-porg.h 补丁。

【讨论】:

    猜你喜欢
    • 2011-06-02
    • 2021-08-30
    • 2021-10-19
    • 2016-08-27
    • 2013-08-25
    • 2019-12-07
    • 1970-01-01
    • 2011-07-17
    • 2013-12-29
    相关资源
    最近更新 更多