U-boot环境与Linux“ fw_printenv”不同

时间:2019-10-24 07:09:40

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

我已经使用meta-tegra层为带有yocto的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外壳中看到的环境。

因此u-boot-tegra/include/configs/p3450-porg.h配置中一定有问题。我只是想知道当我执行saveenv ...

时它实际上将环境写入何处

有什么想法我可以尝试改变吗?

1 个答案:

答案 0 :(得分:2)

如对问题的评论中所述,偏移量是32位整数,因此尝试为其提供大于4,294,967,295(20996096 * 512的值)的值将不起作用。

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