uboot环境变量

一、uboot环境变量的作用及设置方法

  uboot的环境变量提供了不用修改代码来修改uboot配置的一种方法,比如要修改uboot加载内核倒计时时间只需要修改bootdelay环境变量即可,要修改板端ip地址,只需要修改ipaddr环境变量即可。

  设置环境变量:setenv bootdelay 10,将倒计时时间修改为10s

  删除环境变量:setenv bootdelay,制空即为删除

  保存环境变量:saveenv

  uboot有以下以下常用的环境变量:

bootdelay:执行自动启动的等候秒数
baudrate:串口控制台的波特率
netmask: 以太网接口的掩码
ethaddr: 以太网卡的网卡物理地址
bootfile: 缺省的下载文件
bootargs:传递给内核的启动参数
bootcmd:自动启动时执行的命令
serverip: 服务器端的ip地址
ipaddr: 本地ip 地址
stdin: 标准输入设备
stdout: 标准输出设备
stderr: 标准出错设备
其中bootcmd和bootargs最为重要,uboot倒计时结束后会自动执行bootcmd环境变量的命令,这些命令是加载内核用的。可以做个测试重新设置bootcmd的命令:

  1、setevn bootcmd cpu status   (cpu status 是打印cpu参数的命令)

  2、saveenv

  设置完成后重启uboot,倒计时结束后就不会加载内核,而会打印cpu参数。

  bootargs环境变量则是uboot传递给内核的参数。

二、xilinx zynqmp uboot 2020.1 环境变量

2.1 配置uboot使能保存环境变量功能

zynqmp 的uboot默认是没有saveenv命令的,需要配置。运行 petalinux-config -c u-boot,如果是单独编译uboot则用make ARCH=arm64 CROSS_COMPILE=aarch64-xilinx-linux- menuconfig出现如下配置界面

 

进入Environment选项,去掉Enviroment is not stored,选择Enviroment is in a FAT filesystem选择将环境变量保存到FAT文件系统中,如果不去掉Enviroment is not stored,则uboot中没有saveenv命令

执行saveenv后会在第一个分区中保存一个uboot.env文件,这个就是环境变量文件。

  

2.2 环境变量初始化过程

-->initr_env  //uboot/common/board_r.c

  -->env_relocate  //uboot/env/common.c

    -->env_load  //uboot/env/env.c,这里会去查找加载环境变量的驱动,如果将环境变量保存到fat文件系统中的,那边这个驱动是在uboot/env/fat.c中。

      -->env_fat_load  //uboot/env/fat.c,调用fat文件系统接口,从fat文件系统中读取uboot.env环境变量文件

      -->env_import  //uboot/env/common.c,先对读取的环境变量进行校验,如果校验失败,则说明环境变量不存在,就会执行env_set_default函数来设置默认环境变量,最后将调用himport_r函数用哈希链表来表示环境变量

 uboot环境变量初始化过程总结一句话:如果用saveenv命令保存过来环境变量,则会去加载保存的环境变量到内存(用哈希链表来表示),如果没有保存环境变量,则加载程序设置的默认环境变量到内存(用哈希链表表示)。

        

posted @ 2022-10-19 14:53  YYFaGe  阅读(1253)  评论(0编辑  收藏  举报