U-boot环境不一样 Linux "fw_printenv"

U-boot environment is not the same as Linux "fw_printenv"

我用 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...

时它实际将环境写入何处

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

如问题评论中所述,偏移量是一个 32 位整数,因此尝试为其赋予大于 4,294,967,295(即 20996096 * 512)的值是行不通的。

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