Jetson Xavier NX刷JetPack 5.1.7跑AI Agent Jetson Xavier NX 这块板子我前后刷过不下十次从早期的 JetPack 4.x 一路折腾到 JetPack 5.1.7每次刷机都像给一台迷你工作站重装灵魂。Agent 刷机这件事重点不只是把系统烧进去而是让这块边缘计算板真正跑起 AI Agent能看、能听、能决策、能控制外设。如果你手里正好有一台 Xavier NX想用 JetPack 5.1.7 搭一个本地 Agent或者你正在做边缘 AI 项目需要一套稳定的刷机加部署路线这篇内容就是我从踩坑现场带回来的实操记录。它适合刚拿到开发板的新手也适合已经刷过机但总在 Agent 运行环境上翻车的朋友。下面我把整套流程拆成方案设计、刷机准备、实操步骤、Agent 部署、问题排查和长期维护几个部分尽量把每个参数和选择理由都讲清楚。1. 整体方案设计为什么在 Xavier NX 上刷 JetPack 5.1.7 跑 Agent1.1 硬件与系统版本的选择逻辑Jetson Xavier NX 是一块很有意思的板子体积只有信用卡大小却带着 384 个 CUDA 核心、48 个 Tensor Core 和 6 核 Carmel ARM CPU。它的算力放在今天不算顶尖但胜在功耗低、接口全、生态成熟。刷 JetPack 5.1.7 的核心原因是这个版本对 Xavier NX 的支持已经非常稳定底层 L4T 35.x 系列的内核、驱动、CUDA、cuDNN、TensorRT 都经过多轮迭代不像早期版本那样动不动就遇到 CSI 摄像头不识别或者 TensorRT 引擎反序列化失败。JetPack 5.1.7 还自带较新的 OpenCV 和 VPI做视觉 Agent 时能少编译很多库。我选 Xavier NX 跑 Agent不是因为它能跑 70B 大模型而是因为它在 10W 到 20W 的功耗区间里可以同时处理摄像头输入、语音唤醒、本地小模型推理和 GPIO 控制。很多 Agent 项目并不需要云端大模型只需要一个能理解指令、调用工具、控制硬件的本地循环。Xavier NX 刚好卡在这个甜点位上比树莓派快得多比 Orin 便宜不少比 x86 工控机省电。JetPack 5.1.7 则是目前 Xavier NX 上最省心的系统底座之一刷完就能直接进 CUDA 环境不用从零折腾驱动。1.2 Agent 负载与边缘算力的匹配“Agent 刷机”这个词听起来像把 Agent 刷进系统实际更准确的理解是先把 Jetson 刷成干净的 JetPack 5.1.7再在系统上部署 Agent 运行时。Agent 的负载通常分成四层感知层、推理层、决策层和执行层。感知层可能包括 CSI 摄像头、USB 麦克风、IMU推理层跑视觉模型、语音模型或小语言模型决策层用 Agent 框架做任务编排执行层通过 GPIO、串口、MQTT 控制电机、继电器或屏幕。Xavier NX 的 8GB 或 16GB 内存决定了模型规模。8GB 版本跑 1.5B 到 3B 的量化语言模型比较舒服16GB 版本可以尝试 7B 的 4bit 量化模型但上下文不能开太大。我的经验是如果 Agent 需要同时跑视觉检测和语言推理最好把视觉模型用 TensorRT 加速语言模型用 llama.cpp 的 CUDA 后端两者分时复用 GPU避免显存和内存双重爆掉。JetPack 5.1.7 对 TensorRT 8.5 的支持比较完整ONNX 转 engine 的成功率也比老版本高。1.3 刷机路线的取舍SDK Manager 还是命令行刷 JetPack 5.1.7 有两条主流路线NVIDIA SDK Manager 图形化工具以及 Linux_for_Tegra 命令行刷机。SDK Manager 适合第一次刷机的人它会自动下载组件、生成镜像、引导进入 recovery还能顺手装主机端工具。缺点是下载体积大、依赖 Ubuntu 宿主机、网络不稳时容易断。命令行刷机适合批量部署和自动化只要提前下好 BSP 和 RootFS一条 flash.sh 就能烧录但需要自己处理 recovery 模式和依赖。我一般推荐新手先用 SDK Manager 走一遍完整流程把系统跑起来确认硬件没问题。之后如果要批量刷机或者做定制镜像再转命令行。不要一上来就追求全自动因为 recovery 模式、USB 线材、宿主机 USB 控制器这些坑图形化工具至少能给你更明确的报错。JetPack 5.1.7 的 SDK Manager 版本要选对太老的 SDK Manager 可能不包含这个版本去 NVIDIA 开发者页面下载最新版即可。2. 刷机前的硬软件准备与关键参数2.1 宿主机环境与依赖刷 Jetson 需要一个 x86_64 的 Ubuntu 宿主机官方推荐 Ubuntu 20.0422.04 也能用但部分依赖包名字变了需要手动补。我习惯用一台物理机不用虚拟机因为 USB 直通在 recovery 阶段经常出问题。如果非要用虚拟机记得把 USB 控制器直通给虚拟机并且在刷机过程中不要插拔其他 USB 设备。宿主机上先装基础工具sudo apt update然后安装python3-pip、python3-venv、libusb-1.0-0-dev、ssh-askpass、screen、picocom。SDK Manager 需要登录 NVIDIA 开发者账号提前注册好。磁盘空间至少留 40GB因为 JetPack 5.1.7 的组件包加上镜像缓存很容易超过 20GB。网络最好有线下载 CUDA、cuDNN、TensorRT 这些大包时断一次就得重来。sudo apt update sudo apt install -y python3-pip python3-venv libusb-1.0-0-dev \ ssh-askpass screen picocom curl wget注意不要让宿主机自动挂载 Jetson 的 USB 设备刷机时如果系统弹出“是否挂载”的窗口直接关掉否则会干扰 recovery 识别。2.2 目标板状态检查与线材选择Jetson Xavier NX 开发套件有两个版本eMMC 版和 SD 卡版。eMMC 版板载 16GB 存储刷机必须通过 USB-C 连接到宿主机SD 卡版可以从 SD 卡启动但首次刷 bootloader 仍然可能需要 recovery。刷机前检查板子上的跳线帽或按钮FC REC 和 GND 是恢复模式的关键。开发套件通常有按钮按住 FC REC 再按 RESET就能进入 recovery。USB 线是重灾区。很多 Type-C 线只能充电不能传数据刷机时表现为 SDK Manager 一直找不到设备。我建议用 Jetson 包装里附带的线或者明确标了 USB 3.0 数据线。连接后宿主机执行lsusb看到0955:7e19或NVIDIA Corp.相关设备才说明 recovery 识别成功。如果看到0955:7020之类可能是进入了别的模式重新按 recovery 组合键。lsusb | grep -i nvidia # 正常 recovery 下应出现 NVIDIA Corp. APX 或类似设备2.3 镜像包与存储介质规划用 SDK Manager 刷机时它会下载 JetPack 5.1.7 对应的所有包。你可以在下载前选择组件Jetson Linux、Jetson Runtime Components、CUDA、cuDNN、TensorRT、OpenCV、VPI 等。如果只跑纯 CPU Agent可以去掉一些视觉组件节省空间但我建议第一次全选后面再裁剪。命令行刷机则需要下载两个东西Jetson Linux BSP 压缩包和 RootFS 压缩包版本必须匹配 JetPack 5.1.7。存储介质方面eMMC 版只有 16GB刷完系统加上 CUDA 就剩不了多少。如果 Agent 需要存模型最好加一块 NVMe SSD。Xavier NX 的 M.2 Key M 插槽支持 NVMe但要注意供电和散热。SD 卡版可以用高速卡但 SD 卡读写寿命有限长时间跑 Agent 日志容易坏。我的做法是系统跑在 eMMC 或 NVMe模型和日志放 NVMeSD 卡只做备份。存储方案容量速度适合场景注意点eMMC 16GB小中等最小系统、轻量 Agent空间紧张慎存模型microSD大较慢临时测试、数据盘寿命和随机读写差NVMe SSD大快模型仓库、日志、容器注意散热和供电3. JetPack 5.1.7 刷机实操全流程3.1 SDK Manager 图形化刷机步骤先下载 SDK Manager 的 deb 包安装后运行。登录 NVIDIA 账号第一步选择产品Jetson Xavier NX。第二步选择版本JetPack 5.1.7。第三步勾选组件主机端可以只选下载目标端全选。第四步设置下载路径和存储路径路径不要有中文和空格。第五步开始下载下载完成后进入刷机阶段。刷机前让板子进入 recovery断开电源按住 FC REC 按钮不放插上 USB-C 到宿主机再按一下 RESET松开 RESET最后松开 FC REC。此时 SDK Manager 应该能检测到设备。如果它提示“Could not detect device”先检查lsusb再检查 USB 线最后换宿主机 USB 口。开始刷机后不要拔线等待进度条走完。刷完后板子会自动重启进入 Ubuntu 首次配置设置用户名、密码、时区、语言。# 安装 SDK Manager 示例 sudo apt install -y ./sdkmanager_*.deb sdkmanager提示SDK Manager 刷机过程中如果卡在 “Flashing Jetson” 很久先看宿主机终端日志常见原因是 USB 线质量差或宿主机 USB 控制器兼容性。换到主板后置 USB 口通常更稳。3.2 命令行静默刷机与参数拆解命令行刷机适合已经熟悉流程的人。先解压 BSP 和 RootFS进入Linux_for_Tegra执行apply_binaries.sh把 RootFS 和 BSP 合并。然后进入 recovery执行 flash.sh。设备名和根设备参数不能乱写eMMC 版通常是jetson-xavier-nx-devkit-emmcSD 卡版通常是jetson-xavier-nx-devkit根设备 eMMC 是mmcblk0p1SD 卡可能是mmcblk1p1或mmcblk0p1具体用ls Linux_for_Tegra/*.conf查看。tar xf Jetson_Linux_R35.x_aarch64.tbz2 sudo tar xpf Tegra_Linux_Sample-Root-Filesystem_R35.x_aarch64.tbz2 -C Linux_for_Tegra/rootfs/ cd Linux_for_Tegra sudo ./apply_binaries.sh # 进入 recovery 后 sudo ./flash.sh jetson-xavier-nx-devkit-emmc mmcblk0p1刷机参数里jetson-xavier-nx-devkit-emmc告诉脚本用哪套分区配置mmcblk0p1告诉它根文件系统烧到哪个块设备。如果你加了 NVMe可以后续把根文件系统迁移到 NVMe但首次刷机建议先烧 eMMC确保系统能启动。flash.sh执行时间大概 10 到 20 分钟取决于 USB 速度和镜像大小。中途断电会导致板子变砖需要重新进入 recovery 再刷。3.3 首次启动配置与系统裁剪刷完首次启动系统会引导你设置用户、密码、网络。进入桌面后先打开终端执行sudo apt update sudo apt full-upgrade把系统补丁打上。然后检查 JetPack 版本cat /etc/nv_tegra_release确认 L4T 版本与 JetPack 5.1.7 匹配。接着安装常用工具sudo apt install -y python3-pip python3-venv git cmake build-essential htop iotop vim。系统裁剪要趁早。Xavier NX 的 eMMC 不大先删掉不需要的 snap 包、libreoffice、示例视频。用sudo apt autoremove --purge清理。关闭不需要的服务比如bluetooth、cups如果你不用。设置 zram 或 swap 对 8GB 版本很重要因为 Agent 模型加载时容易吃满内存。可以用sudo systemctl disable bluetooth这种命令按需关闭。别忘了设置风扇Xavier NX 的默认风扇策略比较保守跑推理时温度上得快可以手动写 PWM 值。# 查看 JetPack/L4T 版本 cat /etc/nv_tegra_release # 设置功耗模式先用 -q 查看可用模式 sudo nvpmodel -q # 锁定最大频率测试性能时用 sudo jetson_clocks3.4 刷机后必做的性能与散热验证刷完系统不要急着装 Agent先做一轮硬件体检。跑tegrastats看 CPU、GPU、内存、温度、功耗。用sudo nvpmodel -m 0切到高性能模式再用sudo jetson_clocks锁定频率。跑一个简单的 CUDA 样例确认 GPU 可用。如果nvcc --version报错说明 CUDA 路径没配好检查/usr/local/cuda/bin是否在 PATH 里。TensorRT 可以用dpkg -l | grep tensorrt查看版本。散热验证很关键。Xavier NX 在 15W 模式下满载核心温度可能冲到 80 度以上。如果风扇不转检查/sys/devices/pwm-fan/target_pwm写入 255 看风扇是否全速。长期跑 Agent 建议加散热片或小风扇尤其是装在封闭外壳里。电源也要够官方推荐 19V 2.37A 以上用劣质电源会导致刷机失败或运行中重启。检查项命令预期结果L4T 版本cat /etc/nv_tegra_release与 JetPack 5.1.7 对应CUDAnvcc --version显示 CUDA 版本TensorRTdpkg -lgrep tensorrt功耗模式sudo nvpmodel -q显示当前模式温度tegrastats待机 40-50 度满载 70-85 度风扇cat /sys/devices/pwm-fan/target_pwm可写 0-2554. Agent 运行环境搭建与模型部署4.1 Python、CUDA、TensorRT 依赖检查Agent 通常用 Python 写所以先建虚拟环境避免污染系统 Python。JetPack 5.1.7 自带 Python 3.8 或 3.10具体看版本。创建 venv 后安装基础包numpy、requests、pydantic、fastapi、uvicorn、pyserial。如果要跑 PyTorch不要直接pip install torch那会装成 x86 版本或者不匹配的 ARM 版本。去 NVIDIA 论坛或官方页面找对应 JetPack 5.1.7 的 torch wheel通常名字里有cp38和aarch64。TensorRT 的 Python 绑定一般随 JetPack 安装用python3 -c import tensorrt测试。如果失败检查PYTHONPATH是否包含/usr/lib/python3/dist-packages。CUDA 环境变量写进~/.bashrcexport PATH/usr/local/cuda/bin:$PATHexport LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH。这些细节看起来小但 Agent 项目里 80% 的“CUDA not available”都是路径问题。python3 -m venv ~/agent-env source ~/agent-env/bin/activate pip install --upgrade pip pip install numpy requests pydantic fastapi uvicorn pyserial python -c import tensorrt; print(tensorrt.__version__)4.2 本地 LLM 与 Agent 框架选型Xavier NX 上跑 Agent模型选择比框架选择更重要。我的建议是先用量化 GGUF 模型因为 llama.cpp 对 ARM 和 CUDA 支持好内存占用可控。1.5B 到 3B 的模型在 8GB 版本上能跑出可用的推理速度7B 模型需要 16GB 版本并且要耐心。下载模型可以用wget或huggingface-cli放 NVMe 上。llama-cpp-python 编译时打开 CUDACMAKE_ARGS-DGGML_CUDAon pip install llama-cpp-pythonAgent 框架方面LangChain 功能全但依赖重CrewAI 适合多 Agent 协作但吃内存AutoGen 偏对话。我更喜欢轻量方案自己写一个 ReAct 循环用 llama.cpp 做推理用 Python 函数做工具调用。这样代码可控出问题好排查。下面是一个最小 Agent 示例能理解用户指令并调用“读取温度”工具from llama_cpp import Llama import subprocess llm Llama( model_path/models/qwen2.5-1.5b-instruct-q4_k_m.gguf, n_ctx2048, n_gpu_layers99, verboseFalse ) def get_temp(): out subprocess.check_output([cat, /sys/class/thermal/thermal_zone0/temp]) return fCPU温度: {int(out)/1000:.1f} 摄氏度 tools {get_temp: get_temp} def agent_loop(user_input): prompt f你可以使用工具 get_temp。用户说{user_input}\n请决定是否调用工具。 resp llm(prompt, max_tokens128) text resp[choices][0][text] if get_temp in text: return get_temp() return text print(agent_loop(现在板子热不热))这段代码很粗糙但能跑通“感知-决策-执行”的闭环。生产环境要加超时、异常处理和日志。如果要用 TensorRT 加速视觉模型可以用torch2trt或trtexec把 ONNX 转成 engine再在 Python 里反序列化。注意 TensorRT engine 和硬件、版本绑定换 JetPack 版本后要重新生成。4.3 Agent 服务化与开机自启Agent 不能一直挂在终端里要做成 systemd 服务。写一个 unit 文件指定虚拟环境路径、工作目录、重启策略。这样板子断电重启后 Agent 会自动拉起。日志用 journald 管理方便排查。如果 Agent 需要访问 GPIO 或串口把用户加入dialout、gpio组或者在 service 里设置权限。[Unit] DescriptionEdge AI Agent Afternetwork.target [Service] Typesimple Userubuntu WorkingDirectory/home/ubuntu/agent EnvironmentPATH/home/ubuntu/agent-env/bin ExecStart/home/ubuntu/agent-env/bin/python /home/ubuntu/agent/main.py Restartalways RestartSec5 [Install] WantedBymulti-user.target启用服务sudo systemctl daemon-reloadsudo systemctl enable agentsudo systemctl start agent。用journalctl -u agent -f看日志。如果服务启动失败先手动在虚拟环境里跑一遍确认不是代码问题。systemd 环境变量和交互式 shell 不同PATH、LD_LIBRARY_PATH都要显式写进去否则 CUDA 可能找不到。4.4 传感器与执行器接入实践Agent 要跟物理世界交互传感器接入是绕不过去的。CSI 摄像头用 GStreamer 管道读取比如nvarguscamerasrc。USB 麦克风用arecord或sounddevice。GPIO 用Jetson.GPIO库注意 Xavier NX 的引脚定义和树莓派不一样别照抄。串口设备用pyserial先确认/dev/ttyTHS*或/dev/ttyUSB*的权限。如果 Agent 要控制继电器最好加光耦隔离避免电机反向电动势打坏板子。我一般把传感器读取封装成工具函数注册到 Agent 的工具表里。比如read_temperature、capture_image、set_gpio。工具函数要加超时和异常捕获不能让一个传感器卡死整个 Agent。摄像头采集可以用独立线程把最新帧放进队列Agent 需要时取。语音唤醒可以用 Porcupine 或 Snowboy但要注意授权和资源占用。Xavier NX 的 CPU 不算富裕别同时开太多后台服务。5. 常见问题与排查技巧实录5.1 刷机阶段高频故障刷机阶段最常见的问题是宿主机识别不到设备。第一步永远是lsusb看有没有 NVIDIA 设备。如果没有重新进入 recovery按住 FC REC按 RESET松开 RESET再松开 FC REC。顺序错了就进不去。第二步换 USB 线很多线只有充电功能。第三步换 USB 口前置面板和 Hub 经常供电不足直接插主板后置口。如果用的是虚拟机检查 USB 直通设置刷机时不要让宿主机抢占设备。另一个高频问题是 SDK Manager 下载中断。CUDA、TensorRT 这些包很大网络不稳时容易失败。可以在 SDK Manager 设置里配置代理或者提前用wget下载好 deb 包再离线安装。下载目录不要放在 NTFS 分区权限和符号链接会出问题。如果刷机到一半报 “Flash failed”看日志里具体是哪个分区失败常见原因是 eMMC 坏块或 USB 传输错误重试一次通常能过。现象可能原因排查方法解决找不到设备未进 recoverylsusb重新按 FC REC RESET识别成其他设备模式错误看 USB ID重新进 recovery下载中断网络不稳看 SDK Manager 日志离线包或换网络刷机卡住USB 线/口问题换线换口用主板后置 USB刷机后无法启动镜像不完整串口日志重新刷机5.2 系统启动与驱动异常刷完启动黑屏先确认电源是否足够。Xavier NX 启动瞬间电流较大劣质电源会掉电。HDMI 线也要检查有些线不支持 4K 或 EDID 握手失败。如果串口有输出但屏幕不亮可能是显示服务问题可以尝试sudo systemctl restart gdm。WiFi 和蓝牙如果不能用检查天线是否接好Xavier NX 的无线模块需要外接天线不接天线信号极差。CSI 摄像头不识别先用dmesg | grep -i imx看驱动加载情况。JetPack 5.1.7 对常见 IMX219、IMX477 支持较好但设备树需要匹配。如果用的是第三方摄像头可能要自己编译驱动。USB 摄像头一般免驱用v4l2-ctl --list-devices查看。音频设备用aplay -l和arecord -l确认。所有外设问题先看dmesg再看权限最后查电源。5.3 Agent 运行中的性能与内存问题Agent 跑着跑着变慢八成是内存不够或者温度降频。用tegrastats看内存和温度用htop看进程。8GB 版本跑 3B 模型时如果同时开摄像头和可视化界面内存很容易到 90%。解决办法模型量化到 4bit减少上下文长度关掉桌面环境用sudo systemctl set-default multi-user.target切到命令行。加 zram 也能缓解但治标不治本。另一个问题是 GPU 争用。视觉模型和语言模型同时跑CUDA 上下文切换会拖慢速度。我的做法是错峰摄像头检测用较低帧率语言推理按需触发。如果 Agent 需要实时性可以把视觉模型转成 TensorRT INT8速度提升明显。注意 INT8 校准需要代表性数据否则精度掉太多。TensorRT engine 不要跨设备复制换板子或换 JetPack 版本都要重新生成。# 查看内存和温度 tegrastats # 查看 GPU 使用 sudo pip install jetson-stats jtop # 切到命令行模式节省内存 sudo systemctl set-default multi-user.target5.4 常见问题速查表问题排查命令可能原因处理CUDA not availablenvcc --version路径未配置写 PATH 和 LD_LIBRARY_PATH模型加载 OOMfree -h内存不足量化、减上下文、加 zram推理速度慢tegrastats功耗模式低nvpmodel -m 0jetson_clocks温度过高tegrastats散热差加风扇、清灰、降频服务启动失败journalctl -u agent环境变量缺失在 unit 里写全路径摄像头打不开v4l2-ctl --list-devices权限/驱动加组、检查 dmesg串口无权限ls -l /dev/ttyTHS*用户不在 dialoutsudo usermod -aG dialout $USERAgent 无响应ps auxgrep python进程卡死6. 实操心得与长期维护建议6.1 备份与回滚策略刷机最怕变砖所以我习惯在系统调通后立刻做备份。eMMC 版可以用dd把整个 eMMC 备份到 NVMe 或网络存储但要注意 eMMC 设备节点和大小。更稳妥的方法是用 SDK Manager 的 flash 工具重新刷或者用nvgstcapture之类验证功能。系统配置改多了之后用etckeeper跟踪/etc变化出问题能回滚。Agent 代码用 git 管理模型文件单独备份别跟系统镜像混在一起。如果要把系统迁移到 NVMe可以用rsync把根文件系统复制过去再修改extlinux.conf的 root 参数。这个过程有风险建议先备份 eMMC。另一种做法是 NVMe 只挂载到/models和/var/log系统还在 eMMC简单可靠。我自己的板子就是系统在 eMMC模型和日志在 NVMe跑了半年多没出过存储问题。6.2 散热、功耗与寿命管理Xavier NX 的散热设计决定了它能不能长期跑 Agent。开发套件的散热片只能应付短时间负载如果装在盒子里跑 24 小时一定要加主动风扇。风扇控制可以写脚本根据温度调速温度高于 60 度开 50%高于 75 度开 100%。电源建议用官方适配器或质量好的 19V 电源电压不稳会导致系统随机重启甚至损坏板子。功耗模式按需切换调试时用高性能部署后用 10W 或 15W 平衡模式。长期运行还要注意 eMMC 和 SD 卡的写入寿命。日志不要狂写用 logrotate 限制大小。Agent 的临时文件放 tmpfs 或 NVMe。如果用 SD 卡启动最好换成工业级卡或者干脆迁移到 NVMe。我见过因为日志写满 eMMC 导致系统无法启动的例子排查起来很麻烦。定期df -h看空间设置监控告警。6.3 后续扩展方向这套 Agent 刷机方案跑通后可以往几个方向扩展。一是加视觉用 YOLO 或 Detectron2 做目标检测TensorRT 加速后接到 Agent 工具里实现“看到什么就报告什么”。二是加语音用 Whisper 做语音识别用 Piper 做语音合成做成完整语音助手。三是多 Agent 协作把 Xavier NX 作为边缘节点和局域网内的其他设备通过 MQTT 或 ROS2 通信。四是模型更新用 OTA 方式推送新模型到 NVMe不影响系统分区。我个人在实际操作中的体会是刷机只是开始真正花时间的是让 Agent 稳定运行。不要追求一次把所有功能都堆上去先用最小系统跑通推理再逐个加传感器和执行器。每加一个功能就用 systemd 服务化和日志监控确保出问题能定位。Xavier NX 虽然老但配上 JetPack 5.1.7 和合理的模型量化依然是一块很能打的边缘 Agent 平台。最后再分享一个小技巧刷机前把 SDK Manager 的下载目录设到 SSD 上能省不少等待时间也能减少下载失败的概率。