3. DPU 启动流程与固件管理
BlueField DPU 本质上是一台“藏在网卡里的服务器”:它拥有独立的 ARM 多核处理器、DDR、eMMC、网络接口和 PCIe 端点,因此它的上电启动过程与普通 x86 服务器类似,却又因为要同时承担主机侧 PCIe 设备与独立 SoC 双重角色而更加复杂。理解这条启动链,是后续做固件升级、故障定位和版本兼容性判断的基础。
一、从复位向量到内核:五级启动链
BlueField-2/BlueField-3 的 ARM 侧启动遵循 ARM Trusted Firmware 标准分层模型,从上电到操作系统接管大致经过五个阶段:
- BootROM(BL1):芯片内固化的只读代码,上电后从 eMMC 或 QSPI 的固定偏移读取第一阶段引导程序,负责最基础的时钟、DDR 初始化和信任根校验。
- ATF(BL2/BL31):ARM Trusted Firmware,运行在 EL3 安全态,负责建立安全世界与非安全世界的隔离、配置 PSCI 电源管理、并把控制权交给 BL33。
- OP-TEE(BL32):可信执行环境,运行在安全态 EL1,提供安全存储、密钥管理和可信应用服务。它与 ATF 通过 SMC 调用交互,是 DPU 上做安全启动和密钥保护的关键组件。
- U-Boot(BL33):非安全态引导加载程序,负责加载内核、设备树和 initramfs,并提供 UEFI 兼容的启动服务。
- UEFI / GRUB / Linux Kernel:U-Boot 可以以 UEFI 模式启动,随后由 GRUB 或直接由 U-Boot 加载 Linux 内核,最终由 systemd 或 init 接管用户空间。
这五级并非简单串联,ATF 在 BL31 阶段会常驻内存,OP-TEE 也长期驻留,二者与后续的 U-Boot、内核形成“安全态常驻 + 非安全态接力”的结构。下图展示了这一启动链的层级与交接关系。
二、固件更新工具与操作方式
BlueField 的固件更新主要通过 NVIDIA 提供的 bfb-install 和 mlxbf-bootctl 两类工具完成。前者用于整机 BFB 镜像烧录,后者用于运行时查询和切换启动分区。
典型的 BFB 烧录流程如下(示例参数,实际以官方文档为准):
# 1. 在主机侧确认 DPU 处于可烧录状态
sudo mlxbf-bootctl --query
# 2. 使用 bfb-install 烧录 BFB 镜像到 eMMC
sudo bfb-install -d /dev/rshim0/boot -i bf-bundle-2.7.0-12345.bfb
# 3. 烧录完成后重启 DPU
sudo mlxbf-bootctl --reboot
# 4. 重启后验证固件版本
cat /etc/mlnx-release
mlxbf-bootctl --query | grep -i version
其中 mlxbf-bootctl --query 会输出当前 boot0/boot1 分区状态、ATF 版本、OP-TEE 版本以及 U-Boot 版本。若输出中 ATF version 与 BSP 发布说明不一致,说明烧录未完整覆盖或分区切换未生效。
mlxbf-bootctl --boot-partition=1(示例,具体编号以实际分区布局为准)。
三、版本兼容性检查的四个维度
固件版本不匹配是 DPU 启动异常最常见的原因之一。建议从以下四个维度做交叉检查:
| 检查维度 | 检查对象 | 不匹配的典型现象 |
|---|---|---|
| BSP 与固件 | bf-bundle 版本 vs ATF/OP-TEE/U-Boot 版本 | BL31 阶段卡死,串口无输出 |
| 内核与 DTB | 内核版本 vs 设备树兼容字符串 | 内核 panic,外设无法枚举 |
| 主机驱动与 DPU 固件 | DOCA/MLNX_OFED vs DPU 固件版本 | PCIe 设备可见但功能异常 |
| BMC 与 DPU | BMC 固件 vs DPU 固件 | 带外管理失效,无法远程恢复 |
实际操作中,最可靠的做法是:在升级前记录当前 mlxbf-bootctl --query 的完整输出,升级后逐项比对;同时保留一份 Golden Image 分区,确保任何一级启动失败都能回退。对于生产环境,建议把 BSP 版本、固件版本、内核版本和主机驱动版本写入一份版本矩阵表,作为变更管理的依据。
四、启动失败的快速定位思路
当 DPU 无法正常启动时,可以按启动链从后往前排查:先看串口是否有 U-Boot 输出,若有则问题在内核或根文件系统;若 U-Boot 无输出,则检查 ATF/OP-TEE 是否加载成功;若连 BL1 都没有输出,则可能是 eMMC 分区损坏或 BootROM 校验失败,此时需要进入恢复模式重新烧录 BFB。串口日志是这条链路上最重要的观测点,建议在调试阶段始终保留串口连接。
掌握这条启动链和版本检查方法后,后续做 DPU 模式切换、网络卸载配置和故障恢复时,就能快速判断问题出在固件层、引导层还是操作系统层,而不是盲目重刷整机镜像。