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.config
和 p3450-porg.h
补丁。
我用 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
.
然而,当我在 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.config
和 p3450-porg.h
补丁。