你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

嵌入式系统学习笔记之五-- uboot常用命令 环境变量

2021/12/17 6:34:52

uboot 中环境变量的作用就是在不改变源码、不用重新编译的情况下,可以使我们通过设置环境变量的值来改变 uboot 的一些设置。uboot 开机时会一次性从存储介质(启动介质)中读取全部的环境变量到内存中作为环境变量的初始值,uboot 运行过程中用到的环境变量,都是内存中的环境变量,用户可以使用saveenv 指令将内存中的环境变量重新写入存储介质(启动介质)中,下次重启系统时会从存储介质(启动介质)中读取更新过的环境变量。
1 、查看环境变量
输入 printenv 命令,即可查看所有环境变量:(或者使用print命令),另外在特定的平台中,使用回车命令=print命令

图中我们看到环境变量的基本模式是:变量名=变量值,这个变量值就是一串字符串,程序通过解析字符串,得到所需参数(如 baudrate=115200)或者所要执行的操作(如 mmcargs)。
2 、增改删环境变量
1)我们可以添加一个自己的环境变量,比如添加一个 firstenv 变量,并设置值为 forlinx: =>setenv firstenv forlinx
保存
=>saveenv


saveenv 命令是保存环境变量到 eMMC Flash,如果不使用此命令,那么只是将环境变量存储到了内存中,断电之后,此变量将丢失。
然后使用 printenv 命令查看环境变量添加成功:

 

 或者使用“printenv 变量名”查看:
=> printenv firstenv

 2).删除一个环境变量,删除 firstenv 环境变量,使用 setenv 变量名,不赋任何值:

=> setenv firstenv
=> savenv

 

 使用 printenv 查看结果,发现该变量不存在,表示删除成功:

3 、bootargs

bootargs 是一个重要的环境变量,主要是给内核传递参数,整个环境变量都是围绕着 bootargs 来设置的。bootargs 非常的灵活,内核和文件系统的不同搭配就会有不同的设置方法。下面介绍一下 bootargs常用参数,bootargs 的种类繁多,而且随着 kernel 的发展会出现一些新的参数,使得设置会更加灵活多样。
我们现在使用 printenv bootargs 命令查看一下 bootargs 环境变量:
=> print bootargs


可以看到 bootargs 并没有设置,使用 print 命令查看,发现 bootargs 是在 mmcargs 环境变量中设置的,而 mmcargs 是在 bootdelay 倒计时结束之后,由 bootcmd(bootcmd 介绍在下一节)执行的:


我们使用 run 命令执行一下 mmcargs:
=> run mmcargs
然后再 print bootargs,可以看到 bootargs 环境变量设置成功: 

 其中,

console:表示使用的串口终端控制台,这里使用的是 ttymxc0,波特率是 115200。
root:表示文件系统相关参数。其中/dev/mmcblk1p2 表示 rootfs 文件系统挂载分区为 mmcblk1 的 p2分区。rootwait 是指等待设备/dev/mmcblk1p2 设备就绪后才尝试挂载 rootfs。如果没有此参数,Linux 内核启动时可能会在存储设备尚未就绪时就尝试挂载 rootfs,此时肯定挂载失败,那么启动也就失败了。
rw:声明启动权限,即以读写方式启动。
rootfstype:表示文件系统类型,如果所使用的文件系统类型是 ext2、3、4 类型,此参数可以不写,但对于 yaffs 或者 ubi 的文件系统,需要指明文件系统类型,如我们的 NAND 版,使用的是 yaffs2 文件系统。
看一下 NAND 版的 bootargs:


可以看到 NAND 版的 bootargs 所挂载的根文件系统所在分区为/dev/mtdblock5,文件系统类型为
rootfstype=yaffs2

 4 、bootcmd
bootcmd 在 bootdelay 倒计时结束之后开始执行的第一条命令,主要用于启动内核。
例如:


bootcmd=if mmc rescan; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1;then echo update from sd ···;run update_from_sd;else echo boot from emmc ···;if run loadimage; thenrun mmcboot; elif run loadimagebak; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi
这个 bootcmd 的就是一个命令集,根据设置好的环境变量,按照一定的逻辑启动内核。关于此处的启动逻辑不再深入讲解,有兴趣的可以展开其中环境变量进行深究。
5 、bootdelay
用于倒计时,等待用户进入命令行。经过以上章节讲解,通过 senenv 可以设置 bootdelay 时间。

 

 下次分析常用的网络的相关命令。