You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TFTP加载失败时U-Boot中断执行的问题解决请求

解决U-Boot TFTP加载失败后继续执行后续步骤的问题

在U-Boot中,默认情况下如果某个命令执行失败(返回非0状态),整个脚本就会终止执行——这就是你加载top.bit失败后,后续的run cp_kernel2ram和run netboot都没机会运行的原因。我们可以通过U-Boot的逻辑运算符来改变这个行为,让FPGA加载步骤的失败不影响后续流程。

方法一:直接修改bootcmd,用逻辑运算符包裹FPGA加载步骤

你可以把TFTP加载FPGA比特流和烧写的命令用&&连接(表示只有TFTP成功才执行烧写),然后用|| :来捕获失败状态,确保脚本继续执行:

setenv bootcmd 'run uenvboot; (tftpboot 0x4000000 192.168.0.55:top.bit && fpga loadb 0 0x4000000 0x1fcbff) || :; run cp_kernel2ram && bootm 0x10000000; run netboot'
saveenv

这里的关键细节:

  • (...) 将两个命令作为一个整体执行,只有tftpboot成功时才会执行fpga loadb
  • || : 表示如果前面的整体执行失败(不管是TFTP找不到文件,还是烧写FPGA出错),就执行冒号命令(:是U-Boot内置的空命令,返回成功状态),这样整个脚本就不会因为前面的失败而终止
  • 后续的run cp_kernel2ram && bootm...和run netboot会正常执行,和原来的逻辑一致

方法二:封装成单独的环境变量(更易维护)

如果你的bootcmd比较长,建议把FPGA加载的逻辑封装成一个单独的环境变量,这样后续调整参数时更清晰:

# 先定义加载FPGA的命令集合
setenv load_fpga 'tftpboot 0x4000000 192.168.0.55:top.bit && fpga loadb 0 0x4000000 0x1fcbff'
# 修改bootcmd,调用这个命令并忽略失败
setenv bootcmd 'run uenvboot; run load_fpga || :; run cp_kernel2ram && bootm 0x10000000; run netboot'
saveenv

验证效果

修改完成后保存环境变量,当top.bit不存在时,U-Boot会打印TFTP错误,但会自动跳过FPGA加载步骤,继续执行后面的run cp_kernel2ram和run netboot流程,不会再卡在错误处终止。

内容的提问来源于stack exchange,提问作者user2913869

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:11:22