3. U-Boot环境变量管理
任务说明
本案例要求在QEMU模拟的ARM平台(vExpress-A9)上启动U-Boot,通过命令行完成环境变量的查看、设置、修改、删除与保存操作,并验证环境变量在重启后依然生效。最终目标是掌握U-Boot环境变量的工作机制及其持久化存储方式。
环境准备
使用QEMU自带的ARM虚拟开发板,无需额外硬件。启动U-Boot的完整命令如下:
qemu-system-arm -M vexpress-a9 -nographic -kernel u-boot
其中u-boot为已编译的U-Boot二进制文件(需提前编译或获取)。启动后进入U-Boot命令行提示符VExpress#。
操作步骤与验证
1. 查看当前环境变量
输入printenv命令,显示所有已定义的环境变量及其值。重点关注bootcmd、bootargs、baudrate等关键变量。
VExpress# printenv
baudrate=115200
bootargs=console=ttyAMA0
bootcmd=run bootcmd_1
...
Environment size: 512/131068 bytes
2. 设置新环境变量
使用setenv命令创建自定义变量。例如设置服务器IP地址:
VExpress# setenv serverip 192.168.1.100
VExpress# printenv serverip
serverip=192.168.1.100
3. 修改变量值
对已有变量重新赋值即完成修改。将启动参数中的控制台波特率从115200改为57600:
VExpress# setenv baudrate 57600
VExpress# printenv baudrate
baudrate=57600
4. 删除环境变量
使用setenv命令加空值删除变量:
VExpress# setenv serverip
VExpress# printenv serverip
## Error: "serverip" not defined
5. 保存环境变量
执行saveenv将当前环境变量写入持久化存储(QEMU中为Flash镜像):
VExpress# saveenv
Saving Environment to Flash...
Erasing Flash...
Writing to Flash... done
6. 重启验证持久化
执行reset重启U-Boot,重启后再次执行printenv,确认baudrate仍为修改后的57600,而serverip已不存在:
VExpress# reset
...
VExpress# printenv baudrate
baudrate=57600
VExpress# printenv serverip
## Error: "serverip" not defined
判定标准
本案例验证通过的条件为:
- 能够通过
setenv成功新增、修改和删除环境变量,且printenv能正确反映每次操作后的结果; - 执行
saveenv后无错误提示,Flash写入成功; - 执行
reset重启后,修改过的变量(如baudrate=57600)依然存在且值正确,被删除的变量(如serverip)不再出现。
以上操作均在QEMU模拟环境中完成,不涉及真实硬件。若需在真实开发板上复现,需确保U-Boot已配置对应的Flash驱动支持。