2. 开发环境搭建:高通SDK安装、交叉编译工具链配置、ADB与Fastboot调试环境搭建

说实话,开发环境搭建这事儿,看着琐碎,但真能卡住人好几天。我见过不少同事,芯片选型都定了,结果环境配了一周还没跑通第一个demo。这一章,咱们就把高通ISP开发必须的几样东西,一次性理清楚。

2.1 高通SDK安装——别急着双击

高通SDK不是一个大安装包,而是一套组件集合。你拿到的通常是 Qualcomm_SDK_xxx.zip,解压后里面至少包含:

  • Hexagon SDK:DSP开发核心,ISP pipeline的加速部分跑在这里
  • Qualcomm Neural Processing SDK:如果你要做AI降噪或HDR+,这个少不了
  • Platform SDK:包含板级支持包、驱动源码、编译脚本
注意: 高通SDK对Linux发行版有要求。我踩过坑——Ubuntu 22.04 LTS是官方推荐,但20.04也能跑。千万别用Arch或Fedora,库依赖会让你崩溃。

安装步骤其实就三步:

  1. 解压SDK到 /opt/qualcomm/ 目录(我个人习惯放这里,方便多用户共享)
  2. 设置环境变量 QUALCOMM_SDK_ROOT
  3. 运行 source setup.sh 初始化环境
# 解压
sudo mkdir -p /opt/qualcomm
sudo unzip Qualcomm_SDK_v3.2.zip -d /opt/qualcomm/

# 设置环境变量(建议写入 ~/.bashrc)
export QUALCOMM_SDK_ROOT=/opt/qualcomm/sdk
export PATH=$QUALCOMM_SDK_ROOT/bin:$PATH

# 初始化
source $QUALCOMM_SDK_ROOT/setup.sh

跑完 setup.sh 后,用 qcom_sdk_check 命令验证一下。如果输出类似 SDK version 3.2.0, components: hexagon, platform, nn,那就成了。

2.2 交叉编译工具链配置——别让路径搞死你

高通平台是ARM架构,你的开发机是x86_64。所以必须用交叉编译工具链。说白了,就是在PC上编译出能在高通芯片上跑的二进制。

高通官方提供的是 GCC ARM64工具链,一般集成在SDK里。但如果你单独下载,推荐用 gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu 这个版本。为什么?我在项目里试过,它对高通DSP的NEON指令集支持最好。

小技巧: 配置工具链时,记得把 aarch64-none-linux-gnu-gcc 的路径加到 PATH 里。然后写一个 toolchain.cmake 文件,CMake项目直接引用,省得每次敲长串参数。
# toolchain.cmake 示例
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

set(CMAKE_C_COMPILER aarch64-none-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-none-linux-gnu-g++)

set(CMAKE_FIND_ROOT_PATH /opt/qualcomm/sdk/sysroots/aarch64)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

验证工具链是否正常,编译一个hello world:

aarch64-none-linux-gnu-gcc -o hello hello.c
file hello
# 输出应该包含:ELF 64-bit LSB executable, ARM aarch64

嗯,看到 ARM aarch64 就对了。如果显示 x86-64,说明你还在用本地编译器,赶紧检查路径。

2.3 ADB与Fastboot调试环境搭建

这两个工具是你和高通板子之间的桥梁。ADB负责运行时调试,Fastboot负责刷机和底层操作。

2.3.1 ADB配置

ADB(Android Debug Bridge)虽然名字带Android,但高通平台的Linux系统也支持。安装很简单:

sudo apt install adb fastboot

但光装好不够,还得配USB规则。否则板子插上去,adb devices 列表是空的。我曾经在这上面浪费了半小时,后来发现是 udev 规则没写。

# 创建 /etc/udev/rules.d/51-android.rules
# 高通设备的USB VID通常是 0x05c6
SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev"

# 重载规则
sudo udevadm control --reload-rules
sudo udevadm trigger

插上板子,运行 adb devices,应该能看到设备号。如果显示 unauthorized,去板子上确认一下USB调试授权。

2.3.2 Fastboot刷机准备

Fastboot主要用于烧写bootloader、内核、文件系统。高通平台进入Fastboot模式的方式通常是:按住音量上键+电源键,或者通过 adb reboot bootloader。

命令 用途 常见参数
fastboot devices 查看连接的Fastboot设备 无
fastboot flash boot boot.img 烧写boot分区 --slot=all(双分区设备)
fastboot flash system system.img 烧写system分区 -w(同时擦除用户数据)
fastboot reboot 重启设备 无
警告: 别在Fastboot模式下乱擦除分区。我有个同事,手快敲了 fastboot erase all,结果板子变砖,折腾了两天才用EDL模式救回来。只擦你确定要擦的分区。

2.4 环境验证——跑通第一个ISP Demo

环境搭好之后,我建议你立刻跑一个高通SDK自带的ISP示例,验证整个链路。路径一般在 $QUALCOMM_SDK_ROOT/examples/isp/simple_capture。

cd $QUALCOMM_SDK_ROOT/examples/isp/simple_capture
mkdir build && cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=../../toolchain.cmake
make -j4

# 把编译好的二进制推到板子上
adb push simple_capture /data/
adb shell chmod +x /data/simple_capture
adb shell /data/simple_capture --input test_raw.raw --output result.jpg

如果板子上输出 Capture completed, saved to result.jpg,恭喜你,环境全部通了。

核心要点: 开发环境搭建不是一次性的。每次SDK更新、工具链升级,都要重新验证一遍。我习惯写一个 env_check.sh 脚本,把SDK版本、编译器路径、ADB连接状态都打印出来,省得每次手动查。
高通ISP开发环境搭建知识结构 高通SDK安装 交叉编译工具链 ADB & Fastboot Hexagon SDK (DSP) Neural Processing SDK Platform SDK (BSP) GCC ARM64 10.3 toolchain.cmake NEON指令集支持 udev规则配置 adb push/pull fastboot刷机 环境验证:跑通ISP Demo simple_capture → result.jpg 建议:编写 env_check.sh 脚本,每次环境变更后自动验证全链路