4. 配置U-Boot环境变量
任务说明
本案例要求在U-Boot命令行中完成环境变量的查看、设置与保存操作,以 bootdelay 和 baudrate 两个典型变量为例,理解环境变量对启动流程和串口通信的实际影响。最终目标是在开发板上通过 saveenv 将修改持久化到存储设备,并验证重启后设置仍然生效。
环境变量基础
U-Boot环境变量是一组以键值对形式存储的运行时配置,存放于存储介质(如NOR Flash、NAND、MMC或SPI Flash)的专用分区中。系统启动时U-Boot会将其加载到内存中的哈希表,命令行下的修改仅作用于当前内存副本,只有执行 saveenv 才会写回存储介质。
- bootdelay:自动启动倒计时秒数,若在倒计时结束前按下任意键则进入命令行,否则执行
bootcmd启动内核;设为-1则直接进入命令行且不等待,设为0则立即启动不等待按键。 - baudrate:串口通信波特率,必须与终端软件(如minicom、PuTTY)设置的波特率一致,否则输出乱码或无法交互。
操作命令与验证流程
在U-Boot命令行提示符 => 下依次执行以下操作:
# 1. 查看当前所有环境变量
printenv
# 2. 查看指定变量
printenv bootdelay
printenv baudrate
# 3. 设置变量(示例:将启动延时改为5秒,波特率改为115200)
setenv bootdelay 5
setenv baudrate 115200
# 4. 确认修改已生效
printenv bootdelay baudrate
# 5. 保存到存储介质
saveenv
# 6. 重启验证持久化
reset
验证判定标准:
- 执行
printenv bootdelay baudrate后,输出值应分别为bootdelay=5和baudrate=115200; saveenv命令返回Saving Environment to ... OK提示;- 执行
reset重启后,在倒计时阶段观察是否等待5秒;若修改了波特率,需将终端软件波特率同步调整为115200后重新连接,再执行printenv baudrate确认值仍为115200,即表示持久化成功。
常见问题与恢复方法
- 波特率修改后终端乱码:立即将终端软件波特率切换为新值即可恢复显示;若忘记新值,可尝试常用波特率(9600、57600、115200)逐一连接。
- 误设导致无法启动:若
bootdelay设为-1且bootcmd无效,U-Boot会停留在命令行;若设bootdelay 0导致无法中断自动启动,可在上电瞬间连续按键进入命令行,或使用U-Boot提供的bootmenu快捷键(通常为Ctrl+C或空格键,具体取决于板级配置)。 - 恢复出厂默认:执行
env default -a恢复编译时的默认环境变量,再执行saveenv覆盖错误配置。
关键实现说明
上述命令由U-Boot内置的 cmd/nvedit.c 实现,核心函数为 do_env_set(处理 setenv)、do_env_print(处理 printenv)和 do_env_save(处理 saveenv)。setenv 通过 env_set 更新内存哈希表,saveenv 调用板级驱动(如 env/mmc.c、env/flash.c)将完整环境块写入存储介质。若需在自定义代码中读取环境变量,可使用 env_get("bootdelay") 接口,返回字符串指针;数值型变量可用 env_get_ulong("bootdelay", 10, 0) 直接获取无符号长整型值。
本案例不涉及源码修改,仅需在U-Boot命令行完成操作验证。若开发板尚未进入U-Boot命令行,请先确认串口连接和终端参数(波特率通常为115200或板级默认值),并在上电时按下任意键中断自动启动流程。