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

U-Boot配置TFTPboot获取Linux镜像超时后不再重试问题咨询

解决U-Boot TFTP超时后不再重试的问题

看你描述的情况确实挺闹心的——U-Boot配置了通过TFTP加载image.ub镜像,可要是开机时TFTP服务器还没准备好,触发超时后就彻底放弃重试了,哪怕之后服务器就绪也不会再尝试连接。从你贴的运行日志也能看得明明白白:

Filename 'image.ub'.
Load address: 0x10000000
Loading: T T T T T T T T T T
Retry count exceeded; starting again
Zynq>

明明日志提示“starting again”,但实际上根本没再发起连接对吧?下面给你几个实用的解决思路:

1. 调整U-Boot的TFTP重试参数

U-Boot默认的TFTP重试次数和超时时间可能不够灵活,你可以先在命令行临时测试调整,没问题再固化到配置里:

  • 命令行临时修改(立即生效,重启后失效):
    # 设置单次重试的超时时间(单位:毫秒,这里设为5秒)
    setenv tftp-timeout 5000
    # 设置最大重试次数(这里设为20次)
    setenv tftp-retries 20
    # 保存环境变量到板载存储,让修改重启后依然生效
    saveenv
    
  • 编译时固化默认值(修改U-Boot的配置文件,比如configs/zynq_xxx_defconfig):
    CONFIG_TFTP_TIMEOUT=5000
    CONFIG_TFTP_RETRIES=20
    

2. 编写自动循环重试的U-Boot启动脚本

如果单纯调参数还是满足不了需求,你可以写个简单的启动脚本,让U-Boot在TFTP失败后自动循环重试,直到成功为止:

setenv bootcmd 'tftpboot 0x10000000 image.ub; if test $? -ne 0; then echo TFTP failed, retrying in 3s...; sleep 3; run bootcmd; fi; bootm 0x10000000'
saveenv

这个脚本的逻辑很直白:先执行TFTP下载,要是返回值非0(说明下载失败),就打印提示、等3秒,然后重新执行启动命令;直到下载成功后,再启动镜像。

3. 启用U-Boot的自动重启重试功能

部分U-Boot版本支持启动失败后自动重试的功能,你可以检查配置文件里有没有CONFIG_AUTOBOOT_RETRY项,没有的话直接开启:

CONFIG_AUTOBOOT_RETRY=y
# 设置重试间隔时间(单位:秒)
CONFIG_AUTOBOOT_RETRY_TIME=5

开启后,当启动流程中出现错误时,U-Boot会自动等待指定时间后重新尝试整个启动流程。

另外你提到的日志里“Retry count exceeded; starting again”却没实际重试的问题,大概率是你用的U-Boot版本里这个提示只是回到命令行,而非重新执行启动命令,上面的脚本方案应该能完美解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:32:35