uboot下备区启动问题

更新固件包后,在os下更改账号密码,ssh无法登陆,密码输入无误,web界面暂无,无法使用telnet登陆,所以现在想要在uboot下切换为备区启动,还原成之前的bmc固件

以下是当前uboot的环境

问题:
目前没有看到切换备区启动的命令,执行setenv boot_bank 1 然后reset,依然是主区启动

能否提供一下在uboot下切换到备区启动的流程

答案内容由AI生成,仅供参考:

在 U-Boot 下切换到备用区启动的详细流程

当 BMC 固件更新后出现 SSH 登录失败、Web 无法访问等问题时,可以通过 U-Boot 切换至备用启动分区(backup bank)恢复系统。以下是基于 Hi1711 平台的完整操作指导。


:magnifying_glass_tilted_left: 问题分析

当前情况:

  • 固件已更新,但新版本存在配置或认证问题(如账户密码修改无效)
  • Web 界面不可用,Telnet 无法连接
  • SSH 可登录但认证失败
  • 需要通过 U-Boot 手动切换到备份区(备区)启动旧版本固件

:warning: 关键提示setenv boot_bank 1 无效是因为平台未启用 boot_bank 变量控制;Hi1711 平台依赖 分区设备名(如 umcblk0gp1, umcblk0gp2)和 fw_upgrade 命令 实现主备切换。


:white_check_mark: 解决方案:通过 U-Boot 切换到备区启动

步骤 1:进入 U-Boot 命令行

在串口终端上电启动设备,看到如下提示时快速按 Ctrl + B 进入 U-Boot shell:

Hit 'ctrl + b' to stop autoboot:  0

进入后应显示类似:

=> 

步骤 2:确认当前可用的启动分区

Hi1711 平台通常使用 eMMC 的多个 GPP 分区作为固件区,例如:

  • /dev/umcblk0gp0 → 主区(active)
  • /dev/umcblk0gp1 → 备区(backup)

虽然 U-Boot 环境中不直接列出设备,但可通过常见命名规则判断。


步骤 3:使用 fw_upgrade 命令切换启动分区

:white_check_mark: fw_upgrade 是 Hi1711 平台专用命令,用于切换主备固件分区

语法格式(根据 Document Chunk 1 中用户实践):

fw_upgrade <新 active> <新 backup> <原 active> <原 backup>

示例:切换到备区作为新 active 分区

=> fw_upgrade 5 4 5 6

其中:

  • 5:对应 /dev/umcblk0gp1(常用映射)
  • 6:对应 /dev/umcblk0gp2
  • 数值含义取决于具体系统定义(参考 dboot_probe_info 输出)

:light_bulb: 目的:将原 backup 区设为新的 active 区,实现回退。

:pushpin: 来自知识库证据:

  • 文档片段 1 中提到:“fw_upgrade 5 4 5 6” 成功实现切换。
  • “我找到了在 uboot 下切换启动分区的方法,当前每个启动分区都可以切换并且启动”

步骤 4:查看启动源信息(可选诊断)

运行以下命令查看上次启动信息(如有):

=> printenv

查找是否有 boot_from 或相关变量记录启动源。

也可尝试:

=> dboot_probe_info

来自知识图谱:dboot_probe_info 包含 boot source, BMC reset count 等关键数据。


步骤 5:重启并验证是否从备区启动

执行重启:

=> reset

重启后,观察日志中是否加载了旧版本固件(如版本号、时间戳不同),确认是否已从备区启动。


:repeat_button: 补充说明:如何验证切换成功?

方法一:检查版本信息

登录系统后运行:

ipmcget -d version

比对输出中的 active 和 backup 版本,确认当前运行的是旧版固件。

方法二:检查日志

运行:

dmesg | grep -i "boot\|load"

查看是否从 /dev/umcblk0gp1 等备用设备加载。


:red_exclamation_mark: 注意事项与风险提示

项目 说明
不支持 boot_bank 变量 当前 Hi1711 平台 U-Boot 不解析 boot_bank,设置无效
避免随意烧写 错误操作可能导致双区损坏,最终需返厂维修
建议预设恢复点 若支持 ipmcset -d restore,应在升级前设置恢复点
双区均损坏的后果 如主备都异常,则必须使用 JTAG 或返厂修复(见 DC4)

:hammer_and_wrench: 恢复建议流程总结

步骤 操作
1 使用串口连接目标设备
2 上电时按 Ctrl+B 进入 U-Boot
3 输入 fw_upgrade 5 4 5 6(或其他已知有效组合)
4 输入 reset 重启系统
5 观察是否恢复正常 SSH/Web 访问
6 成功后使用 ipmcset -d upgrade 重新刷入正确固件

:puzzle_piece: 附录:相关命令参考

命令 功能
printenv 查看 U-Boot 环境变量
fw_upgrade a b c d 设置下一启动分区
reset 重启系统
dboot_probe_info 查看启动设备及重置计数(若有)
ipmcget -d version 获取固件版本信息(系统运行后)

:white_check_mark: 结论
在 U-Boot 中无法通过 setenv boot_bank 1 实现切换,必须使用平台专用命令 fw_upgrade 修改启动顺序。通过该方式可以成功切换至备区启动,恢复先前可用的 BMC 固件版本,进而完成问题修复或重新升级。

如有需要,请联系项目支持人员获取 精确的分区编号映射表 以确保切换准确无误。

相关链接:

  1. 如何手动切换分区
  2. 【方案讨论】支持自动下载安装bmc_sdk,减少openubmc的容器数量
  3. 请问能否提供hi1711的uboot文件(2.1.07),目前版本无法Ctl+B进入uboot命令行
  4. BMC固件损坏时恢复环境指导
  5. 升级你的BMC | 文档中心 | openUBMC

参考AI答复操作一下

=> fw_upgrade 5 4 5 6
Unknown command ‘fw_upgrade’ - try ‘help’

我当前环境下的uboot没有这个切换分区的命令

可以试试:
Uboot下敲reg_wr 0x8740148 1
之后再ctrl b进入L1
fw_upgrade 5 4 5 6(后面456是分别指/dev/mmcblk0gp0 /dev/mmcblk0gp1 /dev/mmcblk0gp2)
boot_a55

按照您的方法,进入L1后执行fw_upgrade,结果如下:

再执行boot_a55后,打引如下:

依然是从area0启动的哎,启动之后在操作系统更改密码,依然无法ssh登陆

4 5 6就是从0开始启动的,换成645试试

感谢,这边改成645就是备区启动了