存储介质上的保存
在使用过程中,保存在存储设备上的环境变量内容可能会被修改,因此选择存储位置时需要考虑存储介质的特点。 比如 MTD 设备上要注意保存在独立的擦除块上,以免在修改时影响其他数据的完整性。
常见的保存方式有下面两种:
-
与 U-Boot 一起保存
在使用 MMC 存储时,有些方案会将 ENV 保存在 U-Boot 的分区,并且放在 U-Boot 分区的尾部。 通过在 DTS 中指定分区名字即可访问到。
-
单独分区保存
多数方案使用单独的分区保存。
在 ArtInChip 平台上,不同存储介质上 ENV 的默认保存设置如下文所述。
MMC
MMC 的 ENV 存储位置可以通过下面几个方式进行设置:
-
Kconfig 配置指定 Offset 和 大小
-
CONFIG_ENV_OFFSET
-
CONFIG_ENV_OFFSET_REDUND
-
CONFIG_ENV_SIZE
-
CONFIG_ENV_IS_IN_MMC
-
-
DTS 中配置 offset,Kconfig 配置大小
-
“u-boot,mmc-env-offset”
-
“u-boot,mmc-env-offset-redundant”
-
-
DTS 中配置分区名字,Kconfig 配置大小
-
“u-boot,mmc-env-partition”
-
目前默认的配置使用最后一种方式,通过 DTS 中的 config 节点配置:
config{u-boot,mmc-env-partition="env";};
u-boot,mmc-env-partition = “env” 表示环境变量使用独立分区的方式,保存在 mmc 设备的”env”分区上。
通过 Kconfig 设置 CONFIG_ENV_SIZE 大小为 16KB。
保存 ENV 数据的区域为该分区的前 CONFIG_ENV_SIZE 大小。相关的源码在文件: board/artinchip/d211/mmc_env.c 。
SPI NAND
U-Boot 项目的源码本身没有支持 SPI NAND 启动,环境变量也没有支持从 SPI NAND 读取, ArtInChip 平台增加了 SPI NAND 的支持。
ENV 存储位置的配置通过 Kconfig 进行,需要配置的选项有下面几个:
-
CONFIG_ENV_OFFSET
-
CONFIG_ENV_SIZE
-
CONFIG_ENV_RANGE
相应的源码在 env/spinand.c 。
SPI NOR
U-Boot 原本已经支持从 SPI NOR 启动和加载 ENV 内容。ENV 的存储位置通过 Kconfig 进行, 需要配置的选项有下面几个:
-
CONFIG_ENV_SPI_BUS
-
CONFIG_ENV_SPI_CS
-
CONFIG_ENV_SPI_MAX_HZ
-
CONFIG_ENV_SPI_MODE
-
CONFIG_ENV_OFFSET
-
CONFIG_ENV_OFFSET_REDUND
-
CONFIG_ENV_SECT_SIZE
-
CONFIG_ENV_SIZE
-
CONFIG_ENV_IS_IN_SPI_FLASH
相应的源码在 env/sf.c 。
RAM
ArtInChip 平台上增加了从 DRAM 指定地址加载环境变量的功能,主要用于 USB 升级的场景。 在 USB 升级的过程中,主机端会先发送一个 env.bin 到设备指定内存地址,然后再启动 u-boot 进行升级。
相关的配置通过 Kconfig 进行,需要配置的选项有:
-
CONFIG_ENV_RAM_ADDR
相应的源码在 board/artinchip/d211/env_location.c 。