2. 开发环境搭建与首次接触
BlueField DPU 与普通网卡最大的区别在于:它本身就是一台独立运行的 ARM 计算机,拥有自己的 CPU、内存、存储、固件和操作系统。因此“开发环境搭建”实际上要同时处理两条系统线——x86 主机(Host)一侧和 DPU 一侧,并通过 BMC、串口、SSH、bfb 镜像安装等环节把两者打通。本节按真实上机顺序展开,先建立物理与带外通道,再完成 DPU 系统安装,最后准备 DOCA 开发容器。
一、上电前的物理连接与 BMC 带外管理
BlueField-2 DPU 通常以 PCIe 卡形式插在服务器 x86 主机的 PCIe 插槽中。上电前需要确认三类连接:PCIe 金手指已完全插入并固定;DPU 的两个 QSFP 端口按需接入光模块或 DAC 线缆;最关键的是 BMC 管理网口(部分型号为 RJ45 或通过 OOB 接口)接入管理交换机。BMC 是 DPU 的带外管理控制器,即使 DPU 的 ARM 系统未启动,只要卡上有待机供电,BMC 就能响应。
BMC 默认地址因厂商而异,常见为 192.168.0.1 或 192.168.1.1,用户名/密码多为 root/0penBmc(注意是数字 0)。首次接入时,把开发机网卡设为同网段静态地址,例如 192.168.0.100/24,然后执行:
# 探测 BMC 是否在线
ping 192.168.0.1
# 通过 Redfish 查询 DPU 基本信息
curl -k -u root:0penBmc https://192.168.0.1/redfish/v1/Systems/Bluefield
# 查看当前电源状态
curl -k -u root:0penBmc https://192.168.0.1/redfish/v1/Systems/Bluefield | grep PowerState
BMC 提供 Web 界面、Redfish API 和串口重定向三种访问方式。Web 界面适合查看传感器、固件版本和电源状态;Redfish 适合脚本化批量操作;串口重定向则用于系统安装和故障排查。三者互补,缺一不可。
二、串口接入:观察 DPU 启动全过程
串口是 DPU 首次上电时唯一可靠的“眼睛”。在 DPU 的 ARM 系统尚未安装或网络未配置时,SSH 无法使用,只能通过串口查看 U-Boot、内核和安装程序的输出。BMC 通常把 DPU 的串口映射为 /dev/ttyUSB0 或通过 SOL(Serial over LAN)暴露。以本地 USB 转串口为例:
# 查看串口设备
ls /dev/ttyUSB*
# 使用 minicom 连接,波特率 115200
minicom -D /dev/ttyUSB0 -b 115200
# 或使用 screen
screen /dev/ttyUSB0 115200
连接成功后按回车,应能看到 U-Boot 提示符或 Linux 登录提示。若通过 BMC 的 SOL 访问,可使用 ipmitool sol activate。串口输出中要重点关注:内存容量识别、eMMC/NVMe 存储识别、网口 PHY 初始化、以及是否进入 UEFI Shell 或安装引导。这些信息直接决定后续 bfb 镜像能否正常写入。
三、bfb 镜像安装:把 DPU 变成可用系统
bfb(BlueField Boot Stream)是 NVIDIA 提供的 DPU 系统镜像包,内含 UEFI、ATF、U-Boot、Linux 内核、根文件系统和 DOCA 运行时。安装 bfb 的本质是把这套镜像写入 DPU 的 eMMC 或 NVMe。推荐在 x86 主机上通过 bfb-install 工具经 RSHIM 通道完成,因为 RSHIM 不依赖 DPU 已有系统,属于“裸机烧录”通道。
# 在 x86 主机上安装 rshim 与 bfb-install
sudo apt install rshim
sudo systemctl start rshim
# 确认 RSHIM 设备出现
ls /dev/rshim0/
# 下载并安装 bfb 镜像(示例版本)
wget https://content.mellanox.com/BlueField/BFB/bf-bundle-2.5.0-108_24.04_ubuntu-22.04_prod.bfb
sudo bfb-install -b bf-bundle-2.5.0-108_24.04_ubuntu-22.04_prod.bfb -r rshim0
安装过程中,串口会持续输出写入进度。典型阶段包括:擦除存储、写入 boot stream、写入根文件系统、校验。完成后 DPU 自动重启,首次启动会进行文件系统扩展和 SSH 密钥生成。判断安装成功的依据是:串口出现登录提示,且 DPU 的 oob_net0 或 tmfifo_net0 接口获得地址。
Model 字段确认。四、主机与 DPU 双系统协同
安装完成后,系统进入“双系统”状态:x86 主机运行自己的 OS,DPU 运行 Ubuntu。两者通过 PCIe 内部通道和 RSHIM 虚拟网口通信。DPU 侧通常出现 tmfifo_net0(默认 192.168.100.1/24),主机侧出现 tmfifo_net0(默认 192.168.100.2/24)。这是最稳定的管理通道。
# 主机侧查看 RSHIM 网口
ip addr show tmfifo_net0
# 从主机 SSH 登录 DPU
ssh ubuntu@192.168.100.1
# DPU 侧查看 PCIe 功能与网口
lspci | grep Mellanox
ip link show
双系统协同的关键是明确“谁管谁”:主机负责 PCIe 枚举、驱动加载和业务下发;DPU 负责网络卸载、存储虚拟化和安全策略执行。开发时通常从主机 SSH 进 DPU,在 DPU 上编译和运行 DOCA 程序,再通过主机侧验证数据面效果。
五、DOCA 开发容器准备
DOCA 是 NVIDIA 为 DPU 提供的软件开发框架,包含 DOCA SDK、驱动、库和示例。官方推荐在 DPU 上使用 DOCA 容器进行开发,以保证环境一致。容器镜像通常从 NGC 拉取,需要先在 DPU 上安装 Docker 并配置 NVIDIA Container Toolkit。
# 在 DPU 上安装 Docker
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker
# 拉取 DOCA 开发容器(示例版本)
sudo docker pull nvcr.io/nvidia/doca/doca:2.5.0-devel
# 启动容器并挂载工作目录
sudo docker run -it --rm --privileged --network host \
-v /home/ubuntu/doca_ws:/workspace \
nvcr.io/nvidia/doca/doca:2.5.0-devel /bin/bash
进入容器后,用 doca_info 查看版本,用 pkg-config --modversion doca-common 确认库可用。若要在主机侧交叉编译,则需在主机安装 DOCA-Host 包,并通过 doca_caps 查询 DPU 能力集。容器准备完成的判断标准是:能编译并运行一个最小 DOCA 示例(如 doca_flow 的 flow_acl),且程序能识别到 DPU 的 representor 端口。
--privileged 和 host 网络才能访问 DPU 的硬件卸载资源。生产环境应改用更细粒度的 device 挂载和 capability 配置,避免过度授权。至此,开发环境的主干已经打通:BMC 提供带外控制,串口提供启动观测,RSHIM 提供裸机烧录,bfb 提供完整系统,双系统 SSH 提供日常开发入口,DOCA 容器提供一致的编译运行环境。后续所有 DPU 卸载开发都建立在这条链路上。