2.9、uboot源码分析5-uboot的环境变量(2021-5-8)

本文详细介绍了U-Boot中的环境变量作用、优先级和工作方式,并通过源码分析了`printenv`、`setenv`和`saveenv`等命令的实现。内容包括环境变量的查找、设置和保存到持久存储的过程,以及相关函数如`getenv`和`getenv_r`的使用。通过对这些基本操作的理解,有助于深入掌握U-Boot的环境变量管理和系统启动流程。

2.9.1、uboot的环境变量基础

2.9.1.1、环境变量的作用

在这里插入图片描述

2.9.1.2、环境变量的优先级

在这里插入图片描述

x210 # bdinfo                    //环境变量
arch_number = 0x00000998
env_t       = 0x00000000
boot_params = 0x30000100
DRAM bank   = 0x00000000
-> start    = 0x30000000
-> size     = 0x10000000
DRAM bank   = 0x00000001
-> start    = 0x40000000
-> size     = 0x10000000
ethaddr     = 00:40:5C:26:0A:5B
ip_addr     = 192.168.1.20
baudrate    = 115200 bps
// An highlighted block
var foo = 'bar';

2.9.1.3、环境变量在uboot中工作方式

在这里插入图片描述

/************************************************************************
 * Default settings to be used when no valid environment is found
 * 找不到有效环境时使用的默认设置
 */
#define XMK_STR(x)	#x
#define MK_STR(x)	XMK_STR(x)

#if defined(CONFIG_S3C6410) || defined(CONFIG_S3C6430) || defined(CONFIG_S5P6440) || defined(CONFIG_S5PC100) || defined(CONFIG_S5PC110) || defined(CONFIG_S5P6442)
uchar default_environment[CFG_ENV_SIZE] = {
   
               //default_environment:默认环境变量
#else
uchar default_environment[] = {
   
   
#endif
#ifdef	CONFIG_BOOTARGS                         //CONFIG_BOOTARGS(启动参数)如果定义了
	"bootargs="	CONFIG_BOOTARGS			"\0"    //字符串+\0
#endif
#ifdef	CONFIG_BOOTCOMMAND                     //CONFIG_BOOTCOMMAND如果定义了
	"bootcmd="	CONFIG_BOOTCOMMAND		"\0"

在这里插入图片描述


2.9.2、环境变量相关命令源码解析1

2.9.2.1、printenv

在这里插入图片描述

x210 # print
mtdpart=80000 400000 3000000
baudrate=115200
ethaddr=00:40:5c:26:0a:5b
bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3
bootcmd=movi read kernel 30008000; bootm 30008000
filesize=37B800
fileaddr=30000000
gatewayip=192.168.1.1
netmask=255.255.255.0
ipaddr=192.168.1.20
serverip=192.168.1.141
bootdelay=10
//Cmd_nvedit.c
U_BOOT_CMD(
	printenv, CFG_MAXARGS, 1,	do_printenv,
	"printenv- print environment variables\n",
	"\n    - print values of all environment variables\n"
	"printenv name ...\n"
	"    - print value of environment variable 'name'\n"
);

在这里插入图片描述

//Cmd_nvedit.c
if (argc == 1) {
   
   		/* Print 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值