3. 开发环境搭建与源码获取:高通平台Camera HAL源码目录结构,QNX/Android侧编译环境配置,关键工具链准备

在高通Camera HAL层移植项目中,开发环境的搭建是决定后续调试效率的关键环节。本章将系统梳理高通平台Camera HAL的源码目录结构、QNX与Android双系统的编译环境配置方法,以及必备工具链的准备清单。掌握这些基础,才能在实际适配中快速定位编译错误与链接问题。

3.1 高通Camera HAL源码目录结构

高通Camera HAL源码通常位于 vendor/qcom/proprietary/camera 或 vendor/qcom/opensource/camera 目录下,其核心模块组织如下表所示:

目录/文件功能描述关键子模块
camera_hal/HAL层主入口,实现Camera HAL3接口QCamera2HAL.cpp, QCamera3HAL.cpp
mm-camera2/多媒体框架层,包含ISP、JPEG、Sensor等isp/, sensor/, jpeg/
camera_metadata/Camera元数据解析与封装metadata_parser.cpp
camera_common/公共工具库,如日志、内存管理cam_log.cpp, cam_mem.cpp
camera_plugin/第三方算法插件接口plugin_manager.cpp
camera_test/HAL层单元测试与压力测试test_camera3.cpp

目录结构要点: 移植时重点关注 mm-camera2/sensor/ 下的Sensor驱动适配,以及 camera_hal/ 中的HAL接口实现。不同平台(如SM8450、SM8550)的目录布局基本一致,但部分模块路径可能因QSSI(Qualcomm Single System Image)策略有所调整。

高通Camera HAL源码目录结构(核心模块) vendor/qcom/camera/ camera_hal/ mm-camera2/ camera_metadata/ camera_common/ QCamera2HAL.cpp QCamera3HAL.cpp isp/ sensor/ jpeg/ metadata_parser.cpp cam_log.cpp 说明:移植重点在 mm-camera2/sensor/ 的Sensor驱动适配,以及 camera_hal/ 的HAL接口实现。 不同平台(SM8450/SM8550)目录布局基本一致,部分模块路径可能因QSSI策略调整。

3.2 QNX侧编译环境配置

QNX侧Camera HAL编译依赖高通提供的QNX SDK和Board Support Package(BSP)。配置步骤如下:

  1. 安装QNX SDK:从高通官方获取QNX 7.1或8.0的SDK安装包,执行 qnx710-install 脚本。
  2. 设置环境变量:在 ~/.bashrc 中添加QNX工具链路径。
  3. 配置BSP:将平台BSP(如 qcs8250_bsp)解压到 $QNX_TARGET 目录。
  4. 编译Camera HAL模块:使用 make 或 qmake 构建。

QNX环境变量配置示例:

export QNX_HOST=/opt/qnx710/host/linux/x86_64
export QNX_TARGET=/opt/qnx710/target/qnx7
export PATH=$QNX_HOST/usr/bin:$PATH
export MAKEFLAGS="-j16"
环境变量说明典型值
QNX_HOST主机工具链路径/opt/qnx710/host/linux/x86_64
QNX_TARGET目标系统根目录/opt/qnx710/target/qnx7
QNX_BSP平台BSP路径/opt/qnx710/target/qnx7/bsp/qcs8250
CAMERA_HAL_PATHCamera HAL源码路径/home/user/camera_hal_qnx

常见问题: QNX侧编译时容易遇到 libcamx 或 libcamera 的链接错误,通常是因为BSP版本与SDK不匹配。建议使用高通官方提供的 manifest.xml 文件进行版本对齐。

QNX侧Camera HAL编译环境配置流程 安装QNX SDK 设置环境变量 配置BSP 编译HAL模块 关键检查点:BSP版本与SDK版本必须匹配,否则链接libcamx时会报错。 建议使用高通官方manifest.xml进行版本对齐。

3.3 Android侧编译环境配置

Android侧Camera HAL编译集成在AOSP(Android Open Source Project)构建系统中。配置要点如下:

  • 初始化AOSP环境:执行 source build/envsetup.sh 和 lunch 选择目标平台(如 lunch qssi-userdebug)。
  • Camera HAL模块路径:在 device/qcom/ 或 vendor/qcom/ 下的 BoardConfig.mk 中配置 CAMERA_HAL_PATH。
  • 编译命令:使用 mmma 或 make 编译指定模块。

Android侧编译命令示例:

source build/envsetup.sh
lunch qssi-userdebug
cd vendor/qcom/opensource/camera
mmma -j16
编译目标命令输出产物
完整HAL模块mmma vendor/qcom/opensource/cameracamera.qcom.so
单个Sensor驱动mmma vendor/qcom/opensource/camera/mm-camera2/sensorlibsensor.so
测试用例mmma vendor/qcom/opensource/camera/camera_testcamera_test

Android侧注意事项: 如果使用QSSI(Qualcomm Single System Image)架构,Camera HAL可能位于 vendor/qcom/opensource/camera 而非 vendor/qcom/proprietary。编译前务必确认 Android.bp 或 Android.mk 中的依赖路径是否正确。

3.4 关键工具链准备

无论是QNX还是Android侧,以下工具链都是Camera HAL移植的必备组件:

工具/工具链用途获取方式
GCC/Clang交叉编译器编译目标平台二进制QNX SDK自带;Android NDK
Make/CMake构建系统系统包管理器安装
Python 3.x脚本支持、代码生成系统包管理器安装
Repo工具管理多Git仓库源码apt install repo
ADB/Fastboot设备调试与刷机Android SDK Platform Tools
QNX Momentics IDEQNX侧调试与分析高通QNX SDK安装包
Perf/Simpleperf性能分析Android NDK内置

工具链版本对齐: 高通Camera HAL对编译器版本敏感。例如,SM8450平台要求Clang 12.0以上,而SM8550要求Clang 14.0。使用错误版本会导致 undefined reference 或 ABI mismatch 错误。建议在 BoardConfig.mk 中显式指定 TARGET_TOOLCHAIN_VERSION。

Camera HAL移植关键工具链关系 Camera HAL源码 交叉编译器 构建系统 调试工具 性能分析 版本对齐要求:SM8450需Clang 12.0+,SM8550需Clang 14.0+ 错误版本会导致 undefined reference 或 ABI mismatch

3.5 源码获取与版本管理

高通Camera HAL源码通常通过 repo 工具从多个Git仓库同步。获取流程如下:

  1. 初始化Repo工作区:使用高通提供的 manifest.xml 文件。
  2. 同步源码:执行 repo sync -c -j16 拉取所有仓库。
  3. 切换分支:根据平台标签(如 LA.VM.1.2.1.r1)切换到对应分支。

Repo初始化命令示例:

mkdir camera_hal_workspace
cd camera_hal_workspace
repo init -u https://source.codeaurora.org/quic/la/platform/manifest -b release -m qssi_manifest.xml
repo sync -c -j16

版本管理建议: 在移植过程中,建议使用 git tag 标记每次适配的基线版本,方便后续回溯。同时,将修改的HAL代码单独放在 vendor/ 目录下的私有仓库中,避免与高通原生代码冲突。