2. U-Boot基础命令使用

任务说明

本案例使用QEMU模拟ARM虚拟平台(virt),启动一份预编译的U-Boot固件,在U-Boot命令行中练习环境变量相关命令:printenv查看变量、setenv修改变量、saveenv持久化保存,以及reset重启验证保存结果。通过该闭环掌握U-Boot环境变量的工作机制。

启动U-Boot

首先获取U-Boot二进制文件。使用QEMU官方测试镜像或自行编译均可,本案例使用qemu-system-arm直接加载U-Boot的virt平台默认配置(qemu_arm_defconfig编译产物为u-boot)。若尚未编译,可执行:

# 在U-Boot源码根目录
make qemu_arm_defconfig
make CROSS_COMPILE=arm-linux-gnueabi-

启动命令:

qemu-system-arm -machine virt -cpu cortex-a15 -m 256M \
  -nographic -bios u-boot

启动后进入U-Boot命令行,提示符为U-Boot>。

环境变量操作

U-Boot环境变量以键值对形式存储于内存中,saveenv将其写入持久化存储(virt平台默认写入Flash或文件)。执行以下命令序列:

# 1. 查看当前所有环境变量
printenv

# 2. 查看单个变量
printenv bootdelay

# 3. 新建/修改变量
setenv my_var hello_qemu

# 4. 确认修改
printenv my_var

# 5. 持久化保存
saveenv

# 6. 重启验证
reset

重启后再次执行printenv my_var,若输出my_var=hello_qemu,说明保存成功。

关键命令说明

命令作用示例
printenv打印全部或指定环境变量printenv bootargs
setenv设置或删除变量(删除用setenv var)setenv bootdelay 5
saveenv将当前环境变量写入存储设备saveenv
reset软复位系统reset

验证方法

判定标准:

  1. 启动后能正常进入U-Boot命令行,无报错;
  2. printenv能列出至少bootargs、bootcmd、bootdelay等默认变量;
  3. setenv my_var hello_qemu后printenv my_var输出my_var=hello_qemu;
  4. saveenv返回Saving Environment to Flash...且无错误;
  5. reset重启后my_var仍然存在,值未丢失。

若第5步失败,说明存储设备未正确配置或写入权限异常,需检查U-Boot的CONFIG_ENV_IS_IN_FLASH等配置。

常见问题排查

  • saveenv报错:确认当前平台支持持久化存储,virt平台默认使用Flash,若使用-bios方式启动,需确保U-Boot编译时包含Flash驱动。
  • 变量名冲突:避免覆盖bootargs等关键变量导致无法启动,练习时建议使用自定义名称。
  • 退出QEMU:在U-Boot命令行输入poweroff或直接按Ctrl+A X退出。
U-Boot环境变量操作时序 用户输入 U-Boot命令处理 Flash存储 终端输出 printenv 读取 变量列表 setenv my_var 内存中创建/修改变量 printenv my_var my_var=hello_qemu saveenv 写入 Flash写入成功 reset 系统重启,重新加载 读取 my_var=hello_qemu 查询/读取 修改 持久化 重启

预期输出示例

执行printenv my_var后,终端显示:

my_var=hello_qemu

执行saveenv后显示:

Saving Environment to Flash... OK

以上输出由命令直接产生,可作为验证依据。