4. Snapdragon开发环境搭建

在进入机器人感知系统开发之前,先把开发环境搭稳,是后续所有工作的前提。本节围绕 Qualcomm Robotics RB5/RB6 开发套件,梳理从硬件识别、系统烧录、交叉编译到调试通道配置的完整链路。需要先明确一个基本判断:RB5 与 RB6 虽然同属高通机器人平台,但计算模组、载板接口和默认系统镜像并不完全通用,烧录前必须确认套件型号与镜像版本匹配,否则容易出现启动失败或外设不可用。

一、开发套件与硬件识别

Qualcomm Robotics RB5 开发套件通常由核心板(搭载 QRB5165 处理器)与 I/O 载板组成,板载提供 USB 3.1、USB 2.0、千兆以太网、HDMI、MIPI CSI 摄像头接口、40-pin 低速扩展口以及调试串口。RB6 则基于 QCS6490 等平台,接口布局和电源要求有所变化,部分版本采用更紧凑的载板设计。拿到套件后,先确认三件事:核心板型号丝印、载板版本号、以及配套电源适配器规格。RB5 常见供电为 12V/3A 以上,RB6 部分套件要求 12V/5A,供电不足会导致启动过程中反复重启或 USB 枚举失败。

硬件识别阶段建议记录以下信息,便于后续选择镜像和工具链:

  • 核心板型号:如 RB5 对应 QRB5165,RB6 对应 QCS6490。
  • 载板版本:不同版本可能改变串口引脚定义或 USB 通道映射。
  • 启动介质:eMMC、UFS 或 microSD,决定烧录方式与镜像类型。
  • 调试接口:Micro-USB 或 USB-C 调试口,以及 3.3V TTL 串口排针。

二、Ubuntu 与 Yocto 系统烧录

RB5/RB6 官方提供两类系统镜像:一类是基于 Ubuntu 的发行版镜像,适合快速验证和上层应用开发;另一类是基于 Yocto 构建的镜像,适合定制内核、驱动和精简系统。烧录方式主要有两种:通过 QDL(Qualcomm Device Loader)工具在 EDL 模式下烧录,或通过 fastboot 烧录分区镜像。

以 Ubuntu 镜像烧录为例,典型流程如下。首先在主机安装 QDL 工具和依赖:

sudo apt update
sudo apt install android-tools-adb android-tools-fastboot
git clone https://github.com/linux-msm/qdl.git
cd qdl && make

随后将开发板置于 EDL 模式:断开电源,按住载板上的 EDL 按键或短接相应测试点,再接入 USB 调试线并上电。主机执行 lsusb,若看到 Qualcomm, Inc. Gobi Wireless Modem 或类似 05c6:9008 设备,说明已进入 EDL。接着执行烧录:

sudo ./qdl --debug prog_firehose_ddr.elf rawprogram*.xml patch*.xml

烧录完成后,开发板会自动重启进入系统。若使用 fastboot 方式,则需先通过 fastboot devices 确认设备可见,再依次刷写 boot、system、vendor 等分区。Yocto 镜像的烧录逻辑类似,但镜像通常以 .wic 或分区包形式提供,需根据发布说明选择对应 rawprogram 文件。烧录后首次启动时间较长,建议通过串口观察内核日志,确认没有卡在 Starting kernel... 或文件系统挂载失败。

烧录前务必核对镜像版本与核心板型号。RB5 与 RB6 的引导链和分区表不同,混用镜像可能导致设备无法进入 EDL 或启动循环。

三、交叉编译工具链

机器人应用通常涉及大量 C/C++ 代码、ROS 2 节点和底层驱动,直接在开发板上编译效率低。因此需要在 x86_64 主机上配置交叉编译工具链。高通平台常用的是基于 Yocto SDK 的工具链,或 Linaro AArch64 GCC。若使用 Yocto 构建的镜像,推荐直接安装对应 SDK:

chmod +x qcom-robotics-sdk.sh
./qcom-robotics-sdk.sh -d ~/qcom-sdk
source ~/qcom-sdk/environment-setup-aarch64-poky-linux

环境变量生效后,$CC、$CXX、$SYSROOT 会自动指向交叉工具链和目标根文件系统。此时编译一个简单程序:

$CC hello.c -o hello
file hello
# 输出应显示 ARM aarch64,而非 x86-64

若使用 CMake,可在 toolchain 文件中指定 CMAKE_SYSTEM_NAME Linux、CMAKE_C_COMPILER aarch64-poky-linux-gcc 以及 CMAKE_SYSROOT。交叉编译时最常见的错误是链接到主机库,表现为 skipping incompatible 或 cannot find -lxxx。此时应检查 --sysroot 是否指向目标根文件系统,并确认依赖库已包含在 SDK 中。

四、ADB 与调试串口配置

ADB 用于文件传输、日志抓取和 shell 交互。开发板启动后,通过 USB 调试口连接主机,执行 adb devices 应能看到设备序列号。若显示 unauthorized,需在开发板端确认 RSA 授权弹窗;若显示 no permissions,则需在主机添加 udev 规则:

echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666"' | sudo tee /etc/udev/rules.d/51-qcom.rules
sudo udevadm control --reload-rules
sudo udevadm trigger

调试串口是更底层的通道,即使系统未完全启动也能看到引导日志。RB5/RB6 载板通常提供 3.3V TTL 串口,接线时注意 TX/RX 交叉、GND 共地,波特率常见为 115200。在 Linux 主机上可使用 minicom 或 picocom:

sudo picocom -b 115200 /dev/ttyUSB0

串口日志中重点关注 U-Boot 阶段的分区加载、内核启动时的设备树匹配,以及 systemd 服务启动顺序。若 ADB 无法连接但串口正常,说明系统已启动但 USB gadget 配置异常,可检查 adb 服务状态和 USB 模式配置。

RB5/RB6 开发环境搭建链路 硬件识别 → 系统烧录 → 交叉编译 → 调试通道 x86_64 主机 Ubuntu 20.04/22.04 QDL / fastboot / adb Yocto SDK 交叉工具链 RB5/RB6 开发板 QRB5165 / QCS6490 eMMC / UFS 启动介质 Ubuntu / Yocto 镜像 EDL 模式 05c6:9008 设备识别 QDL 烧录 rawprogram + patch 首次启动 串口观察内核日志 调试通道与交叉编译验证 ADB 通道 adb devices adb shell / adb push udev 规则 05c6 日志:logcat / dmesg 适用:系统已启动 调试串口 3.3V TTL,115200 TX/RX 交叉,GND 共地 picocom / minicom U-Boot 与内核日志 适用:系统未启动也可用 交叉编译验证 source SDK 环境脚本 $CC hello.c -o hello file hello → aarch64 adb push 到目标板运行 验证:架构与链接库正确 判断依据:串口有完整启动日志、adb devices 可见、交叉编译产物为 aarch64 架构

五、环境验证与常见问题

完成上述配置后,建议按以下顺序做一次闭环验证:先用串口确认系统完整启动到登录提示;再用 adb devices 确认设备在线;接着交叉编译一个简单程序并推送到开发板运行;最后检查网络与摄像头等外设是否被正确枚举。若串口无输出,优先检查波特率、TX/RX 是否接反以及电源是否稳定;若 ADB 设备频繁掉线,检查 USB 线缆质量和主机 USB 控制器供电;若交叉编译产物无法运行,用 file 和 ldd 确认架构与动态库路径。

需要强调的是,RB5 与 RB6 在烧录工具版本、镜像命名和串口引脚上存在差异,实际操作时应以高通官方发布说明和套件随附文档为准。本节给出的命令和参数属于典型示例,具体文件名、分区配置和 SDK 路径需根据实际下载的镜像包调整。把这条链路走通之后,后续的感知系统集成、ROS 2 部署和摄像头调试才有稳定的运行基础。