第二章 开发环境搭建:高通SDK配置、QCT工具链安装、目标板连接与调试环境验证

做夜景模式开发,第一步不是写代码,而是把环境搭稳。我见过太多工程师花两周调通了算法,结果发现连不上目标板——那种感觉,真的很崩溃。

这一章,我们就把高通平台的开发环境从头捋一遍。你跟着我的步骤走,基本不会踩坑。

2.1 高通SDK配置——别小看这一步

高通SDK不是一套简单的库,它包含了ISP pipeline配置、3A算法接口、降噪模块注册框架等等。说白了,你后面写的每一行降噪代码,都要依赖这套SDK才能跑起来。

2.1.1 获取SDK包

你需要从高通官方(QIDP或Chipcode门户)下载对应芯片平台的SDK。常见的有:

芯片平台 SDK名称 关键版本号
SM8450 (Snapdragon 8 Gen1) CamX + CHI v6.0.1 以上
SM8550 (Snapdragon 8 Gen2) CamX + CHI v6.1.0 以上
SM8650 (Snapdragon 8 Gen3) CamX + CHI v6.2.0 以上
我的习惯:下载后先做一次md5校验。我曾经因为网络传输丢包,编译了三天才发现SDK包是坏的。浪费的时间,够我调一轮降噪参数了。

2.1.2 配置环境变量

解压SDK后,需要设置几个关键环境变量。我建议你直接写到 ~/.bashrc 里:

export QC_SDK_ROOT=/opt/qcom/sdk/v6.2.0
export CHIAPI_DIR=$QC_SDK_ROOT/chi/api
export CAMX_DIR=$QC_SDK_ROOT/camx
export TARGET_ARCH=aarch64
export CROSS_COMPILE=aarch64-linux-android-

嗯,这里要注意:TARGET_ARCH 一定要和你目标板的架构一致。我见过有人用armv7的交叉编译器去编aarch64的库,结果链接的时候报了一堆undefined reference。

2.2 QCT工具链安装——调试的命脉

QCT(Qualcomm Camera Tuning)工具链,是我们做图像质量调优的瑞士军刀。它包含了ISP tuning、3A tuning、降噪参数调试等全套工具。

2.2.1 安装步骤

  1. 安装QCT主程序:从高通官方获取安装包,通常是 .run 或 .bin 格式。直接执行:./QCT_Installer_v7.2.0.bin
  2. 安装驱动:QCT需要与目标板通过USB或以太网通信。需要安装 qcusb_driver 和 qceth_driver。
  3. 配置License:将license文件放到 /opt/qcom/license/ 目录下,然后设置环境变量:export LM_LICENSE_FILE=/opt/qcom/license/license.dat
我曾经踩过的坑:QCT的license是绑定MAC地址的。如果你换了网卡或者用了虚拟机,记得重新申请license。否则QCT启动时会直接闪退,连个错误日志都不给。

2.2.2 验证安装

安装完成后,在终端输入:

qct --version

如果看到类似 QCT v7.2.0 (Build 2024-03-15) 的输出,说明安装成功。

2.3 目标板连接——这一步最容易出问题

目标板连接,说白了就是让你的开发机和高通手机/开发板建立通信。我们通常用两种方式:

连接方式 适用场景 速度 稳定性
USB 3.0 初期调试、单帧抓取 ~5 Gbps 中等(线缆质量影响大)
以太网 (ADB over TCP/IP) 长时间跑测试、多设备并行 ~1 Gbps 高

2.3.1 USB连接步骤

  1. 用USB线连接目标板和开发机。
  2. 在目标板上开启开发者模式,启用USB调试。
  3. 在开发机上执行 adb devices,确认设备已识别。

如果 adb devices 显示 unauthorized,别慌。在目标板上确认授权即可。我遇到过最奇葩的情况是USB线只支持充电不支持数据传输——换了根线就好了。

2.3.2 以太网连接(推荐)

我个人更推荐用以太网。为什么呢?因为USB线在长时间调试时容易松动,一旦断开,QCT的session就掉了,所有未保存的参数全丢。

# 在目标板上执行(需要root权限)
adb tcpip 5555

# 在开发机上执行
adb connect 192.168.1.100:5555

# 验证连接
adb devices
小技巧:把目标板的IP固定下来,写到路由器的DHCP静态分配里。否则每次重启都要重新查IP,很烦。

2.4 调试环境验证——别急着写代码

环境搭好了,先别急着写降噪算法。我们做一轮完整的验证,确保所有链路都是通的。

2.4.1 验证清单

  • SDK编译验证:编译一个空白的CHI usecase,确认编译链没问题。
  • ADB通信验证:执行 adb shell 进入目标板,确认能正常交互。
  • QCT连接验证:启动QCT,尝试连接目标板。如果能看到ISP pipeline的实时预览,说明通信正常。
  • 抓图验证:用QCT抓一张raw图,确认数据能正常回传。

2.4.2 快速验证脚本

我写了一个小脚本,用来快速验证环境是否就绪。你可以直接拿去用:

#!/bin/bash
# 环境验证脚本

echo "=== 1. 检查SDK环境变量 ==="
if [ -z "$QC_SDK_ROOT" ]; then
    echo "❌ QC_SDK_ROOT 未设置"
    exit 1
else
    echo "✅ QC_SDK_ROOT = $QC_SDK_ROOT"
fi

echo "=== 2. 检查交叉编译器 ==="
if command -v ${CROSS_COMPILE}gcc &> /dev/null; then
    echo "✅ 交叉编译器可用"
else
    echo "❌ 交叉编译器未找到"
    exit 1
fi

echo "=== 3. 检查ADB连接 ==="
adb devices | grep -q "device$"
if [ $? -eq 0 ]; then
    echo "✅ ADB连接正常"
else
    echo "❌ 未检测到设备"
    exit 1
fi

echo "=== 4. 检查QCT ==="
qct --version &> /dev/null
if [ $? -eq 0 ]; then
    echo "✅ QCT可用"
else
    echo "❌ QCT未安装或license失效"
    exit 1
fi

echo "🎉 环境验证通过!"

2.5 整体环境架构图

下面这张图,把整个开发环境的架构画清楚了。你对照着看,心里就有谱了。

高通夜景模式开发环境架构图 高通夜景模式开发环境架构 开发机 (Host) Ubuntu 20.04 / 22.04 高通SDK (CamX + CHI) v6.2.0 QCT工具链 Tuning + Debug 目标板 (Target) SM8650 MTP / CRD Android 14 + Kernel 6.1 USB 3.0 以太网 (ADB TCP/IP) 调用 💡 关键说明 • 开发机通过USB或以太网与目标板通信 • SDK提供ISP pipeline和算法接口,QCT负责参数调试和实时预览 • 降噪参数通过QCT下发到目标板,实时生效

2.6 常见问题与避坑

问题1:ADB连接不稳定,经常断开

原因:USB线缆质量差,或者USB端口供电不足。

解决方案:换一根带屏蔽的USB 3.0线,或者用带外接电源的USB Hub。

问题2:QCT连接目标板时提示 "Device not found"

原因:QCT驱动未安装,或者目标板上的QCT服务未启动。

解决方案:在目标板上执行 start qctd 启动服务,然后重新连接。

问题3:编译SDK时报错 "undefined reference to CHIAPI"

原因:环境变量 CHIAPI_DIR 未正确设置,或者SDK版本不匹配。

解决方案:检查 echo $CHIAPI_DIR 是否指向正确的路径。我建议你每次打开新终端都执行一遍 source ~/.bashrc。

好了,环境搭建这部分就到这里。你按照上面的步骤走一遍,应该不会有什么大问题。如果遇到奇怪的现象,先检查USB线,再检查环境变量——这两个是出问题最多的环节。