是的,U-boot会将环境变量的内存块复制到RAM.
块来自的持久存储是特定于平台的.一些常见的存储选项(以及处理该存储选项的源文件):
NOR flash env/flash.c SPI flash env/sf.c MMC env/mmc.c
include/configs/yourboard.h中的CONFIG_定义将确定详细信息.例如,对于映射在内存顶部的SPI闪存,可能:
#define CONFIG_ENV_IS_IN_SPI_FLASH #define CONFIG_ENV_SIZE 0x00001000 #define CONFIG_ENV_ADDR 0xFFFFF000
CONFIG_ENV_ADDR是u-boot环境的地址Flash中的变量部分.
请注意,在将环境写入持久存储时,u-boot会自动在此部分创建CRC32.在启动时读取环境时检查CRC.如果没有通过CRC校验,则不使用存储的环境; 而是使用硬编码到程序代码中的新默认环境,这是一种特殊情况.
在U-Boot初始化期间,环境变量被导入到哈希表中.在操作中,所有读/写操作以及所有"printenv"(显示环境变量)和"setenv"(设置环境变量)命令都使用这些表条目.在完成命令"saveenv"之前,任何更改都是未保存的,这会写入持久存储.
有关详细信息,请参阅u-boot/common/cmd_nvedit.c第14-24行和u-boot/README第3474-3881行(行号适用于v2013.10).