u-boot的缺省情况下会有一些基本的环境变量,当执行saveenv时,环境变量会保存到flash存储设备中。如果环境变量的值为空,则uboot会使用uboot代码中的值;如果环境变量不为空,则优先使用环境变量的值。默认环境变量在uboot源码中common/Env_common.c文件中。
uchar default_environment[CFG_ENV_SIZE] =
{
#ifdef CONFIG_BOOTARGS
“bootargs=“CONFIG_BOOTARGS”\0”
#endif
#ifde fCONFIG_BOOTCOMMAND
“bootcmd=“CONFIG_BOOTCOMMAND”\0”
#endif
#ifdef CONFIG_MTDPARTITION
“mtdpart=“CONFIG_MTDPARTITION”\0”
#endif
#ifdef CONFIG_RAMBOOTCOMMAND
“ramboot=“CONFIG_RAMBOOTCOMMAND”\0”
#endif
#ifdef CONFIG_NFSBOOTCOMMAND
“nfsboot=“CONFIG_NFSBOOTCOMMAND”\0”
#endif
#if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
“bootdelay=“MK_STR(CONFIG_BOOTDELAY)”\0”
#endif
#if defined(CONFIG_BAUDRATE) && (CONFIG_BAUDRATE >= 0)
“baudrate=“MK_STR(CONFIG_BAUDRATE)”\0”
#endif
#ifdef CONFIG_ETHADDR
“ethaddr=“MK_STR(CONFIG_ETHADDR)”\0”
#endif
#ifdef CONFIG_IPADDR
“ipaddr=“MK_STR(CONFIG_IPADDR)”\0”
#endif
#ifdef CONFIG_SERVERIP
“serverip=“MK_STR(CONFIG_SERVERIP)”\0”
#endif
#ifdef CONFIG_GATEWAYIP
“gatewayip=“MK_STR(CONFIG_GATEWAYIP)”\0”
#endif
#ifdef CONFIG_NETMASK
“netmask=“MK_STR(CONFIG_NETMASK)”\0”
#endif
#ifdef CONFIG_HOSTNAME
“hostname=“MK_STR(CONFIG_HOSTNAME)”\0”
#endif
#ifdef CONFIG_EXTRA_ENV_SETTINGS
CONFIG_EXTRA_ENV_SETTINGS
#endif
“\0”
};
环境变量存储在default_environment[CFG_ENV_SIZE]数组中,每个环境变量以"\0"结束。例如,可以定义
#define CFG_ENV_SIZE (16*1024)
所有的环境变量存储在一个16KB大小的一维数组中,每个环境变量以"\0"结束。通过调用env_relocate函数,将环境变量从Flash启动设备重定位到SDRAM中。
在对环境变量的操作中,u-boot调用的对环境变量操作的通用函数接口位于common/env_common.c文件,环境变量存储在不同的启动设备时的操作函数接口存放在不同的文件,如common/env_epprom.c、common/env_flash.c、common/env_nand.c,对环境变量的操作函数接口存放在common/env_nvedit.c。
常见的uboot环境变量:
bootargs 传递给内核的启动参数
bootcmd 自动启动时执行的命令
bootdelay 执行自动启动的等候秒数
bootfile 缺省的下载文件
ethaddr 以太网卡的网卡物理地址
ipaddr 本地ip 地址
serverip 服务器端的ip地址
netmask 以太网接口的掩码
baudrate 串口控制台的波特率
stdin 标准输入设备
stdout 标准输出设备
stderr 标准出错设备