2. 开发环境搭建

说实话,做高通平台的双摄融合算法部署,环境搭建这一步要是没弄好,后面全是坑。我见过太多同事花了一周时间调算法,最后发现是工具链版本不对,编译出来的so库在目标板上直接段错误。所以这一章,咱们把地基打牢。

2.1 高通LE/LA内核源码获取

高通的内核源码分两大分支:LA (Linux Android) 和 LE (Linux Embedded)。做手机双摄算法,我们主要跟 LA 分支打交道。LE 更多用在 IoT、车载等非手机场景。

分支 适用场景 内核版本范围 获取方式
LA Android手机/平板 4.9 / 4.14 / 4.19 / 5.4 / 5.10 Codeaurora.org 或 芯片厂商BSP包
LE 嵌入式Linux (非Android) 4.4 / 4.9 / 4.14 / 5.4 Qualcomm LE SDK / 官网

我个人习惯直接从 Codeaurora 的 Git 仓库拉取。举个例子,SM8250 (骁龙865) 的 LA 内核:

# 先确认目标芯片的标签
git clone https://source.codeaurora.org/quic/la/kernel/msm-4.19
cd msm-4.19
git checkout -b my_sm8250_branch LA.UM.9.1.r1-10700-SM8250.0
注意: 标签一定要跟你的 Android 版本匹配。我曾经因为用错了 LA.UM.9.1 的标签,编译出来的内核模块在 Android 11 上直接无法加载,折腾了两天才发现是 ABI 不兼容。

如果你拿不到 Codeaurora 的权限(有些厂商会限制),那就找芯片供应商要 BSP 包。BSP 包里通常已经包含了预编译的内核、设备树、驱动模块,省去你自己打补丁的麻烦。

2.2 交叉编译工具链配置:aarch64-linux-android

双摄融合算法最终要跑在 ARM64 的 ISP 或 DSP 上,所以我们需要 aarch64-linux-android 工具链。说白了,就是用这台 x86 的电脑,编译出能在 ARM 手机上跑的二进制文件。

我推荐直接用 Google 官方提供的 NDK 工具链,省心。步骤如下:

  1. 下载 NDK (建议 r21 以上版本)
  2. 解压后找到 toolchains/aarch64-linux-android-4.9
  3. 配置环境变量
export NDK_HOME=/opt/android-ndk-r21e
export TOOLCHAIN=$NDK_HOME/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
export PATH=$TOOLCHAIN/bin:$PATH
export CROSS_COMPILE=aarch64-linux-android-
export ARCH=arm64
小技巧: 我习惯把这段配置写成一个 setenv.sh 脚本,每次开新终端直接 source setenv.sh。不然每次敲一遍 export,手都酸了。

验证工具链是否生效:

aarch64-linux-android-gcc --version
# 输出类似:aarch64-linux-android-gcc (GCC) 4.9.x 20150123

嗯,这里要注意:GCC 版本不能太新。高通的老内核(比如 4.9)对 GCC 10 以上支持不好,编译时会报一堆语法错误。我一般固定在 GCC 4.9 或 GCC 9.x。

2.3 Qualcomm MCT / TBM 工具安装

MCT (Multimedia Control Tool) 和 TBM (Test Bench Manager) 是高通平台调试双摄算法的核心工具。没有它们,你连 ISP 的寄存器都读不到。

MCT 主要负责:

  • 实时预览摄像头数据流
  • 调整 ISP 参数(曝光、增益、黑电平)
  • 抓取 RAW 图 / YUV 图

TBM 主要负责:

  • 批量跑测试用例
  • 对比算法输出与 ground truth
  • 生成性能报告

安装步骤(以 Ubuntu 18.04/20.04 为例):

# 1. 安装依赖
sudo apt-get install libqt4-dev libxml2-dev libusb-1.0-0-dev

# 2. 解压 MCT 安装包
tar -xzf Qualcomm_MCT_v2.8.0.tar.gz
cd Qualcomm_MCT_v2.8.0

# 3. 运行安装脚本
./install.sh

# 4. 验证安装
mct --version
# 输出:MCT version 2.8.0
避坑指南: 我曾经在 Ubuntu 22.04 上装 MCT,结果 Qt4 库已经废弃了,折腾了半天才找到替代方案。建议用 Ubuntu 18.04 或 20.04,兼容性最好。

TBM 的安装类似,但需要额外配置 MySQL 数据库来存储测试结果:

sudo apt-get install mysql-server
mysql -u root -p
CREATE DATABASE tbm_db;
./tbm_install.sh --db-host localhost --db-user root --db-pass yourpassword

2.4 ADB 与 Fastboot 调试环境

ADB 和 Fastboot 是 Android 调试的左右手。ADB 负责设备连接后的日常调试,Fastboot 负责刷机级别的操作。

ADB 配置要点:

  1. 安装 adb:sudo apt-get install adb
  2. 添加 udev 规则:让 Linux 识别高通设备
  3. 验证连接:adb devices
# 创建 udev 规则文件
sudo vim /etc/udev/rules.d/51-android.rules

# 添加高通设备的 USB ID (以 0x05c6 为例)
SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev"

# 重新加载 udev
sudo udevadm control --reload-rules
sudo udevadm trigger

# 重启 adb server
adb kill-server
adb start-server
adb devices

Fastboot 使用场景:

  • 刷写 boot.img / dtbo.img
  • 解锁 bootloader
  • 恢复变砖的设备
个人经验: 调试双摄算法时,我几乎每天都要用 adb push 把编译好的 so 库推到 /vendor/lib64/ 下,然后用 adb shell sync 确保写入完成。千万别忘了 sync,不然重启后库文件还是旧的,你可能会怀疑人生。

2.5 本章知识体系总览

下面这张图把整个开发环境的结构串起来了。你想想看,从源码到工具链,再到调试工具,每一步都环环相扣。

高通双摄算法开发环境搭建总览 开发环境搭建知识体系 内核源码获取 LA / LE 分支选择 交叉编译工具链 aarch64-linux-android 调试工具链 ADB / Fastboot 高通专用工具 MCT (多媒体控制) + TBM (测试管理) 目标硬件平台 骁龙 8xx / 7xx 系列 + 双摄模组 最终产物:双摄融合算法 so 库 + 调试日志 + 性能报告 提示:每个环节的版本必须严格匹配,否则编译出来的算法在目标板上可能无法运行
核心要点: 环境搭建不是一次性的。每次高通发布新的 LA 标签,或者 Android 版本升级,你都得重新走一遍这个流程。我建议把每一步写成自动化脚本,下次直接跑脚本,省时省力。