uboot的环境变量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SilverFOX111/article/details/87007952


1. uboot的环境变量及其操作

正如Windows其他操作系统一样,虽然uboot构不成操作系统,但它也有属于自己的环境变量,也就是全局变量。在进入uboot的命令行中,输入print可以打印uboot的所有全局变量及其值,下面是uboot的环境变量,由于没有增添过,所以都是默认的环境变量:
在这里插入图片描述


如上图,uboot默认环境变量共10个

  • bootargs是将来传递给内核的参数
  • bootcmd是uboot自启动时执行的命令(默认从启动介质指定扇区中读取kernel和根文件系统到指定内存地址处,远跳转执行kernel处代码,bootm 只会执行第一个地址)
  • mtdpart表示块设备分区,启动内核时会传递给它,具体传参过程详见uboot启动内核笔记,关于mtd设备介绍详见此链接
  • ethaddr表示网卡物理地址
  • ipaddr表示ip网络地址
  • netmask表示掩码地址,用于表示IP地址段
  • gatewayip表示网关地址
  • serverip表示服务器地址,这里的服务器指的是uboot在使用tftp或nfs传输协议时所用到的下载地址
  • baudrate表示波特率,这里说明一点,就算修改了这里的环境变量值,波特率有可能也不会变(已经测试过)
  • bootdelay表示的是开发板自启动时倒数时间,可以通过修改其值自定义启动时间

关于环境变量的操作十分简单,共有三条指令,打印(print/printenv),设置(set/setenv 变量名 [值]),保存(save/saveenv),至于删除也是set命令,只要不写值就是删除,写上就是修改。如果只设置不保存,开机后会使用原来的环境变量。

2. uboot环境变量分区

uboot有两套环境变量,一套是默认的在…/uboot/common/env_common.c 文件中,这些环境变量都是以字符串的形式存在的,他们被定义在一个default_environment[CFG_ENV_SIZE]字符串数组中。另一套在iNand环境变量分区,在uboot启动第二阶段会在环境变量重定位时获取,环境变量分区信息详细过程参考博客

3. uboot环境变量初始化流程

(1). env_init 函数初始化了gd->env_addr变量指向默认环境变量地址,初始化了gd->env_valid变量为1。
(2). mmc_initialize函数初始化了环境变量分区。
(3). env_relocate函数为全局变量env_ptr分配内存,执行env_relocate_spec函数。
(4). env_relocate_spec函数读取环境变量分区内容到全局变量env_ptr地址处,若环境变量分区没有内容,执行(6)。
(5). use_default 函数puts提示信息将默认环境变量内容填充到全局变量env_ptr地址处,置gd->env_valid变量为1。
(6). 置gd->env_addr地址指向env_ptr地址处。

猜你喜欢

转载自blog.csdn.net/SilverFOX111/article/details/87007952