十一.linux开发之uboot移植(十一)——uboot源码分析5-uboot的环境变量

本文详细介绍了U-Boot的环境变量,包括其初始化、存储、获取和修改。通过分析`printenv`、`setenv`和`saveenv`命令的源码,阐述了环境变量的工作原理,并探讨了`getenv`及其可重入版本`getenv_r`的差异。此外,还提到了环境变量的存储结构和在DDR与Flash之间的交互。
摘要由CSDN通过智能技术生成

老规矩有道云地址:http://note.youdao.com/noteshare?id=3645af9d084b3aad1d13858fe5614528&sub=FC582BCEB2994BF09BB3291BF0DE40FA

一.uboot的环境变量简介

u-boot的缺省情况下会有一些基本的环境变量,当执行saveenv时,环境变量会保存到flash存储设备中。

  • 环境变量的优先级

如果环境变量的值为空,则uboot会使用uboot代码中的值;如果环境变量不为空,则优先使用环境变量的值。

默认环境变量在uboot源码中common/Env_common.c文件中。

  • 实现代码
  • 这里写图片描述

所有的环境变量存储在一个16KB大小的一维数组中,每个环境变量以”\0”结束。

uboot在启动时,在遍历调用执行init_sequence函数指针数组中的env_init函数时已经对环境变量进行校验,通过调用env_relocate函数,将环境变量从Flash启动设备重定位到SDRAM中。uboot启动时环境变量的初始化如下:

(具体参考八.linux开发之uboot移植(八)——uboot源码分析2-启动第二阶段之start_armboot函数分析)

这里写图片描述

环境变量有2份,一份在Flash中,另一份在DDR中。uboot开机时一次性从Flash中读取全部环境变量到DDR中作为环境变量的初始化值,然后使用过程中都是用DDR中这一份

bootdelay 执行自动启动(bootcmd中的命令)的等候秒数
baudrate 串口控制台的波特率
netmask 以太网的网络掩码
ethaddr 以太网的MAC地址
bootfile 默认的下载文件名
bootargs 传递给Linux内核的启动参数
bootcmd 自动启动时执行命令
serverip TFTP服务器端的IP地址
ipaddr 本地的IP地址
stdin 标准输入设备,一般是串口
stdout 标准输出,一般是串口,也可是LCD(VGA)
stderr 标准出错,一般是串口,也可是LCD(VGA)

二.环境变量相关命令源码解析1

1、printenv环境变量对应函数(打印出环境变量的功能)

这里写图片描述

(1)找到printenv命令所对应的函数。通过printenv的help可以看出,这个命令有2种使用方法。
第一种直接使用不加参数则打印所有的环境变量;第二种是printenv name则只打印出name这个环境变量的值。

(2)分析do_printenv函数。

这里写图片描述

(3)argc=1时用双重for循环来依次处理所有的环境变量的打印。第一重for循环就是处理各个环境变量。所以有多少个环境变量则第一重就执行循环多少圈。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值