u-boot之环境变量

本文基于u-boot.2016.03.

1、环境变量的作用

uboot中环境变量的作用就是在不改变源码、不用重新编译的情况下,可以使我们通过设置环境变量来使得代码有不同表现,如bootdelay时间、IP地址,向内核的传参bootargs等等,有些环境变量要重启后才能生效使用,有些设置后马上可以使用新设置的值了。

2、常用的环境变量

常用的环境变量定义在一个结构体中,每个环境变量由变量名,等于符号,变量内容,和"\0"组成。

/include/env_default.h

const uchar default_environment[] = {
...
#ifdef	CONFIG_BOOTARGS
	"bootargs="	CONFIG_BOOTARGS			"\0"
#endif
#ifdef	CONFIG_BOOTCOMMAND
	"bootcmd="	CONFIG_BOOTCOMMAND		"\0"
#endif
...
#ifdef	CONFIG_EXTRA_ENV_SETTINGS
	CONFIG_EXTRA_ENV_SETTINGS
#endif
...
};
环境变量 描述
bootargs 传给内核的启动参数
bootcmd 自启动时执行的命令
bootdelay 执行自动启动的等候秒数
baudrate 串口控制台的波特率
ipaddr 本机的IP地址
serverip 服务器端的IP地址
gatewayip 本机网关
netmask 子网掩码
arch 架构(arm)
vendor 芯片厂(freescale)

这里的 CONFIG_EXTRA_ENV_SETTINGS比较特殊,一般在板级文件里定义。
我们这里使用的是sabreauto的参考开发板,这个宏定义在mx6sabre_common.h中定义。

3、代码分析

主要涉及的文件有:

common/board_f.c//uboot启动时比较靠前的初始化工作
common/board_r.c//uboot启动时比较靠后的初始化工作
common/env_common.c// 中间层实现
cmd/nvedit.c//命令层实现
common/env_flash.c//驱动层实现(以eimnor为例)
lib/Hashtable.c //哈希表实现

3.1 顺序结构:

在这里插入图片描述

3.2 分层结构:

uboot中env的整个架构可以分为3部分:

在这里插入图片描述

4、使用“bootdelay”分析

6、有用参考

https://www.cnblogs.com/lidabo/p/5274162.html

猜你喜欢

转载自blog.csdn.net/amwha/article/details/87185523