uboot 环境变量存储和配置

本文介绍U-Boot-2021.10版本中环境变量的管理方式,包括打印、设置及保存环境变量的方法。重点讲解了不同存储介质如SPI Flash和NAND Flash上环境变量的具体存储过程。

环境

本文基于U-Boot-2021.10编写

打印环境变量

使用printevn 打印环境变量

# printevn

打印操作由 cmd/nvedit.c—do_env_print()函数完成
在这里插入图片描述
do_env_print()会调用同一目录下的env_print()打印环境变量值
在这里插入图片描述

设置环境变量

使用setenv 设置环境变量

# setenv  [-f] name value

设置操作由 cmd/nvedit.c—do_env_set()函数完成
在这里插入图片描述
同样会调用同一目录下的_do_env_set()函数,就不放图了;

保存环境变量

使用setenv 设置环境变量后就可以使用saveenv来保存环境变量

# saveenv

根据存储介质的不同,环境变量被保存在不同的地方,具体操作均由env/ 文件夹中的文件完成
可以使用的存储介质如下
在这里插入图片描述
saveenv命令调用env/env.c --env_save()函数
在这里插入图片描述
函数内部会去调用注册的save函数,save()由各个存储介质的env操作文件注册,这里以flash为例, 未定义其他存储介质的话,则为nowhere;

先看 spi nor,进入enc/sf.c 最底部可以看到注册的操作函数
在这里插入图片描述
环境变量存储在spi flash上的操作则由env_sf_save()函数执行
在这里插入图片描述
单截一张图了,具体的操作需要有flash操作知识,感兴趣的可以详细去看;重点关注一下看到的几个可配置值;

CONFIG_ENV_SECT_SIZE   //SECT即为sector 扇区大小
/***************************************
sector size即为flash最小操作块大小,可以使用CONFIG_ENV_SECT_SIZE  手动定义
也可以使用CONFIG_ENV_SECT_SIZE_AUTO此时会使用flash驱动中读取到的最小操作块大小即erase size
****************************************/

CONFIG_ENV_SIZE	//环境变量存储空间大小

CONFIG_ENV_OFFSET // offset即为环境变量从flash offset字节开始存储

那么如果使用spi nor flash在在config文件中应配置的宏为

CONFIG_ENV_IS_IN_SPI_FLASH=y
CONFIG_ENV_SIZE=value
CONFIG_ENV_SECT_SIZE=value or  CONFIG_ENV_SECT_SIZE_AUTO=y
CONFIG_ENV_OFFSET=value

再来看nand,由于nand 需要考虑坏块的存在,如果offset所在地址为坏块,需要跳过该块存储,所以要给定一个范围用于跳坏块的操作,这个空间范围可以是CONFIG_ENV_SIZE的n倍,需额外配置的宏CONFIG_ENV_RANGE,

CONFIG_ENV_IS_IN_NAND=Y
CONFIG_ENV_RANGE =  CONFIG_ENV_SIZE * N

注意: 上述nand指raw nand,也就是并行口的nand flash,并非spi nand,当前版本环境变量的存储不支持spi nand,需要自己适配,适配起来也很简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值