使用uEnv.txt导入uboot环境变量
Zynq开发板在启动uboot后,一般需要修改uboot环境变量,然后加载bitstrteam、内核镜像等,最终进入linux系统,虽然uboot环境变量可以保存,但是在首次启动uboot或者擦除了uboot环境变量数据后,又需要重新配置,如果在uboot环境下使用setenv命令配置,需要输入大量命令,繁琐易出错,因此这里推荐另外一种方式,使用uEnv.txt导入uboot环境变量。
一、创建uEnv.txt文件
直接创建一个名为uEnv的txt文件,将要添加或修改的环境变量以“环境变量名=环境变量值”的格式写在文本里。如下图
然后把uEnv.txt文件放在sd卡的启动分区,和内核镜像放在一起
然后启动zynq开发板,进入uboot环境
二、加载uEnv.txt文件
1.在sd卡或emmc加载uEnv.txt文件
loadbootenv不用更改,保持默认值即可
loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}
需要确保mmc设备连接,然后使用run uenvboot命令
run uenvboot
2.在U盘或读卡器加载uEnv.txt文件
loadbootenv需修改为以下值
loadbootenv=usb start; load usb 0 ${loadbootenv_addr} ${bootenv}
这里使用setenv命令修改环境变量,然后使用run uenvboot命令加载用户环境
setenv loadbootenv 'usb start; load usb 0 ${loadbootenv_addr} ${bootenv}'
run uenvboot
这里可以在uEnv.txt中添加一条环境变量
uenvcmd=saveenv
这条环境变量默认是不存在的,如果它被创建了,uenvcmd会在uenvboot的最后一步被执行,这里添加它的值为saveenv的目的,是在每次导入用户环境后,运行saveenv命令让系统自动保存当前环境变量。
三、流程分析
在uboot下查看uenvboot环境变量,除去打印信息的命令,可知它执行的主要命令有三个,分别为run loadbootenv、run importbootenv、run uenvcmd,最后一条如果不存在则不会执行。
由于第三个是用户自定义的环境变量,所以这里只分析前两个:
1.loadbootenv
这里查看一下它的值,可知run loadbootenv执行的是以下操作
load mmc 0 ${loadbootenv_addr} ${bootenv}
将环境变量的实际值代入,可得到最终的命令
load mmc 0 0x2000000 uEnv.txt
这一句就是将sd卡里的uEnv.txt文件拷贝到内存地址0x2000000里
2.importbootenv
查看它的值,这里省略掉echo打印命令
env import -t ${loadbootenv_addr} $filesize
代入环境变量,得到实际命令
env import -t 0x2000000 3a4
这句命令读取了加载入内存的uEnv.txt文件,将里面的用户环境变量导入了当前系统环境变量。 |