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到
/opt/qualcomm/目录(我个人习惯放这里,方便多用户共享) - 设置环境变量
QUALCOMM_SDK_ROOT - 运行
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 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,恭喜你,环境全部通了。
env_check.sh 脚本,把SDK版本、编译器路径、ADB连接状态都打印出来,省得每次手动查。