3. U-Boot环境变量管理

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
U-Boot环境变量操作流程与存储映射 命令操作序列 1. printenv → 查看当前变量 2. setenv serverip 192.168.1.100 3. setenv baudrate 57600 4. setenv serverip → 删除变量 5. saveenv → 写入Flash 6. reset → 重启验证 内存与Flash存储布局 RAM: 环境变量工作区 baudrate=57600 bootargs=console=ttyAMA0 saveenv Flash: 持久化存储 baudrate=57600 ← 修改后保存 bootargs=console=ttyAMA0 serverip 已删除(不存在) reset加载 验证:重启后baudrate=57600生效 命令操作直接影响RAM中的环境变量 saveenv将RAM内容同步至Flash,reset后从Flash加载

判定标准

本案例验证通过的条件为:

  • 能够通过setenv成功新增、修改和删除环境变量,且printenv能正确反映每次操作后的结果;
  • 执行saveenv后无错误提示,Flash写入成功;
  • 执行reset重启后,修改过的变量(如baudrate=57600)依然存在且值正确,被删除的变量(如serverip)不再出现。

以上操作均在QEMU模拟环境中完成,不涉及真实硬件。若需在真实开发板上复现,需确保U-Boot已配置对应的Flash驱动支持。