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 |
验证方法
判定标准:
- 启动后能正常进入U-Boot命令行,无报错;
printenv能列出至少bootargs、bootcmd、bootdelay等默认变量;setenv my_var hello_qemu后printenv my_var输出my_var=hello_qemu;saveenv返回Saving Environment to Flash...且无错误;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退出。
预期输出示例
执行printenv my_var后,终端显示:
my_var=hello_qemu
执行saveenv后显示:
Saving Environment to Flash... OK
以上输出由命令直接产生,可作为验证依据。