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
如果你拿不到 Codeaurora 的权限(有些厂商会限制),那就找芯片供应商要 BSP 包。BSP 包里通常已经包含了预编译的内核、设备树、驱动模块,省去你自己打补丁的麻烦。
2.2 交叉编译工具链配置:aarch64-linux-android
双摄融合算法最终要跑在 ARM64 的 ISP 或 DSP 上,所以我们需要 aarch64-linux-android 工具链。说白了,就是用这台 x86 的电脑,编译出能在 ARM 手机上跑的二进制文件。
我推荐直接用 Google 官方提供的 NDK 工具链,省心。步骤如下:
- 下载 NDK (建议 r21 以上版本)
- 解压后找到
toolchains/aarch64-linux-android-4.9 - 配置环境变量
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
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 配置要点:
- 安装 adb:
sudo apt-get install adb - 添加 udev 规则:让 Linux 识别高通设备
- 验证连接:
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 本章知识体系总览
下面这张图把整个开发环境的结构串起来了。你想想看,从源码到工具链,再到调试工具,每一步都环环相扣。