本帖最后由 风精灵 于 2025-2-14 11:14 编辑
uboot中环境变量的作用就是在不改变源码、不用重新编译的情况下,可以使我们通过设置环境变量的值来改变uboot的一些设置。uboot开机时会一次性从存储介质(启动介质)中读取全部的环境变量到内存中作为环境变量的初始值,uboot运行过程中用到的环境变量,都是内存中的环境变量,用户可以使用saveenv指令将内存中的环境变量重新写入存储介质(启动介质)中,下次重启系统时会从存储介质(启动介质)中读取更新过的环境变量。
一、查看环境变量 输入printenv命令,即可查看所有环境变量(图片只截取了一部分): 图中我们看到环境变量的基本模式是:变量名=变量值,这个变量值就是一串字符串,程序通过解析字符串,得到所需参数(如baudrate=115200)或者所要执行的操作(如mmcargs)。
二、增改删环境变量
(一)我们可以添加一个自己的环境变量,比如添加一个firstenv变量,并设置值为elf: 保存: saveenv命令是保存环境变量到eMMC Flash,如果不使用此命令,那么只是将环境变量存储到了内存中,断电之后,此变量将丢失。 然后使用printenv命令查看环境变量添加成功: =>printenv filesize=5fa38 firstenv=elf image=zImage 或者使用“printenv 变量名”查看: firstenv=elf
(二)更改环境变量的值,这次我们不保存saveenv: => setenv firstenv imx6ull 然后使用printenv命令查看结果,变量值更改成功: => printenv firstenv firstenv imx6ull
(三)删除一个环境变量,删除firstenv环境变量,使用setenv变量名,不赋任何值: => setenv firstenv => saveenv 使用printenv查看结果,发现该变量不存在,表示删除成功: => printenv firstenv # # Error: “firstenv” not defined
三、bootargs bootargs是一个重要的环境变量,主要是给内核传递参数,整个环境变量都是围绕着bootargs来设置的。bootargs非常的灵活,内核和文件系统的不同搭配就会有不同的设置方法。下面介绍一下bootargs常用参数,bootargs的种类繁多,而且随着kernel的发展会出现一些新的参数,使得设置会更加灵活多样。 我们现在使用printenv bootargs命令查看一下bootargs环境变量: => printenv bootargs # # Error: “bootargs” not defined 可以看到bootargs并没有设置,使用printenv命令查看,发现bootargs是在mmcargs环境变量中设置的,而mmcargs是在bootdelay倒计时结束之后,由bootcmd(bootcmd介绍在下一节)执行的: 我们使用run命令执行一下mmcargs: 然后再printenv bootargs,可以看到bootargs环境变量设置成功: => printenv bootargs bootargs=console=ttymxc0,115200 calibrate=y root=/dev/mmcblk1p2 rootwait rw 其中: console:表示使用的串口终端控制台,这里使用的是ttymxc0,波特率是115200。 root:表示文件系统相关参数。其中/dev/mmcblk1p2表示rootfs文件系统挂载分区为mmcblk1的p2分区。 rootwait是指等待设备/dev/mmcblk1p2设备就绪后才尝试挂载rootfs。如果没有此参数,Linux内核启动时可能会在存储设备尚未就绪时就尝试挂载rootfs,此时肯定挂载失败,那么启动也就失败了。 rw:声明启动权限,即以读写方式启动。
四、bootcmd bootcmd在bootdelay倒计时结束之后开始执行的第一条命令,主要用于启动内核。例如: => printenv bootcmd bootcmd=run findfdt;mmc dev ${mmcdev};mmc dev ${mmcdev}; if mmc rescan; then if run loadbootscript; then run bootscript; else if run loadimage; then run mmcboot; else run netboot; fi; fi; else run netboot; fi 这个bootcmd的就是一个命令集,根据设置好的环境变量,按照一定的逻辑启动内核。关于此处的启动逻辑不再深入讲解,有兴趣的可以展开其中环境变量进行深究。
五、bootdelay 用于倒计时,等待用户进入命令行。经过以上章节讲解,通过senenv可以设置bootdelay时间。 => printenv bootdelay bootdelay=3
|