高通Camera HAL层开发项目实战 - 第3节
3.1 高通平台 Camera 开发板选型与介绍
在高通 Camera HAL 开发中,选择合适的硬件平台是项目启动的第一步。高通为移动设备、IoT 和汽车领域提供了多款集成 ISP(图像信号处理器)的 SoC,不同平台在 Camera 管线、接口带宽和功耗上差异显著。以下表格对比了当前主流的 Camera 开发板平台:
| 平台型号 | ISP 核心 | 最大 Camera 数 | 典型应用 | HAL 版本 |
|---|---|---|---|---|
| SM8450 (Snapdragon 8 Gen1) | Triple ISP 18-bit | 3 路并发 + 3 路辅助 | 旗舰手机、AI 相机 | Camera HAL3 + CHI |
| SM8550 (Snapdragon 8 Gen2) | Cognitive ISP 18-bit | 4 路并发 + 2 路辅助 | 计算摄影、8K 视频 | Camera HAL3 + CHI v2 |
| SA8295P (Snapdragon Cockpit) | Dual ISP 14-bit | 8 路摄像头(环视) | 智能座舱、DMS/OMS | Camera HAL3 + QNX |
| QCS8250 (IoT 旗舰) | Single ISP 14-bit | 2 路主摄 + 2 路辅助 | 工业相机、机器人 | Camera HAL3 + CHI |
3.1.1 开发板硬件接口与 Camera 连接
高通 MTP 板通常提供 4 个 CSI(摄像头串行接口)端口,每个端口支持 4-lane MIPI。Camera 模组通过 FPC 排线连接到板载的 CSI 连接器。以下是一个典型的 Camera 硬件连接拓扑:
3.2 Android 源码下载与编译
高通 Camera HAL 层开发依赖完整的 Android 源码树(AOSP + 高通芯片组 BSP)。以下步骤基于 Ubuntu 22.04 LTS 环境,目标分支为 android-13.0.0_r41 + Qualcomm SM8450 补丁包。
3.2.1 环境准备与 repo 初始化
- 安装依赖包:
sudo apt update
sudo apt install git-core gnupg flex bison build-essential zip curl zlib1g-dev \
gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev \
x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils \
xsltproc unzip fontconfig python3 python3-pip openjdk-11-jdk
- 安装 repo 工具并创建工作目录:
mkdir ~/android-13-sm8450
cd ~/android-13-sm8450
repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r41
- 同步高通芯片组专用仓库(以 SM8450 LA.VENDOR 分支为例):
# 在 .repo/local_manifests/ 下创建 sm8450.xml
mkdir -p .repo/local_manifests
cat > .repo/local_manifests/sm8450.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="qcom" fetch="https://source.codeaurora.org/quic/la/" />
<project path="vendor/qcom/sm8450" name="vendor/qcom/sm8450" remote="qcom" revision="LA.VENDOR.1.0.r1-12000-sm8450.0" />
<project path="kernel/msm-5.10" name="kernel/msm" remote="qcom" revision="LA.UM.9.14.r1-18000-sm8450.0" />
</manifest>
EOF
repo sync -j$(nproc)
https://git.codelinaro.org/clo/la/,并确认分支名称是否仍然有效。
3.2.2 编译 Android 系统与 Camera HAL 模块
编译前需要设置目标设备为 sm8450,并加载高通专有的编译配置:
source build/envsetup.sh
lunch qssi-userdebug
# 或针对特定设备:
lunch sm8450_mtp-userdebug
# 全编译(首次约 2-3 小时)
make -j$(nproc) 2>&1 | tee build.log
# 仅编译 Camera HAL 相关模块(增量开发时使用)
make -j$(nproc) camera.provider 2.4
make -j$(nproc) android.hardware.camera.provider@2.6-service
make -j$(nproc) libcamera_client
make -j$(nproc) libcameraservice
编译产物位于 out/target/product/sm8450/,关键的 Camera HAL 二进制文件如下表:
| 产物路径 | 说明 |
|---|---|
vendor/lib64/hw/camera.sm8450.so |
高通 Camera HAL 主库(CHI 架构) |
vendor/lib64/libchiutils.so |
CHI 工具库,包含 pipeline 管理 |
vendor/etc/camera/camxoverridesettings.txt |
Camera 运行时 override 配置 |
vendor/etc/camera/camxsettings.xml |
Camera 传感器配置和 tuning 参数 |
3.3 QNX 侧 Camera 环境配置
在智能座舱或 ADAS 场景中,Camera HAL 需要运行在 QNX 实时操作系统上。高通为 QNX 提供了独立的 Camera 驱动栈,与 Android 侧共享相同的 CHI 架构,但底层 IPC 和内存管理不同。
3.3.1 QNX 开发环境搭建
QNX 侧开发需要安装 QNX Software Development Platform (SDP) 7.1 或更高版本,并获取高通为 SA8295P 提供的 BSP 包。
- 安装 QNX SDP 7.1:
# 将 QNX SDP 安装包解压到 /opt/qnx710
sudo tar -xzf qnx-sdp-7.1.0-host-linux-x86_64.tar.gz -C /opt/
# 设置环境变量
export QNX_HOST=/opt/qnx710/host/linux/x86_64
export QNX_TARGET=/opt/qnx710/target/qnx7
export PATH=$QNX_HOST/usr/bin:$PATH
- 获取高通 QNX Camera BSP:
# 从 Qualcomm 开发者门户下载 SA8295P QNX BSP 包
# 解压后目录结构如下:
sa8295p-qnx-bsp/
├── src/
│ ├── camera/ # Camera HAL 源码
│ ├── isp/ # ISP 驱动
│ └── sensor_drivers/ # 传感器驱动
├── target/
│ └── qnx7/
│ └── aarch64le/ # 预编译库
└── build/
└── Makefile
3.3.2 QNX Camera 服务启动与验证
QNX 侧 Camera 服务通过 io-camera 进程管理,使用 camxhal 库与底层 ISP 交互。以下是一个典型的启动序列:
# 在 QNX 目标机上执行
# 1. 加载 ISP 固件
io-pkt -d sm8450_isp
waitfor /dev/isp 10
# 2. 启动 Camera HAL 服务
camxhal -c /etc/camera/camxsettings_qnx.xml -v &
# 3. 验证 Camera 设备节点
ls -l /dev/camera/
# 预期输出:
# crw-rw-rw- 1 root root 238, 0 /dev/camera/0 (主摄)
# crw-rw-rw- 1 root root 238, 1 /dev/camera/1 (广角)
# 4. 使用 qcam 测试工具抓取一帧
qcam -d /dev/camera/0 -o frame.raw -f 1920x1080 -n 1
shm_open() + mmap()。
3.3.3 QNX 与 Android 双系统 Camera 共享架构
在 SA8295P 等智能座舱平台上,QNX 运行仪表和环视 Camera,Android 运行娱乐和中控 Camera。两者通过 Hypervisor 隔离,但共享同一套 ISP 硬件。以下架构图展示了这种双系统 Camera 管线:
3.4 开发环境验证清单
完成上述配置后,建议执行以下验证步骤,确保环境可用:
| 验证项 | 命令/方法 | 预期结果 |
|---|---|---|
| Android 编译环境 | lunch sm8450_mtp-userdebug |
输出设备配置信息,无报错 |
| Camera HAL 编译 | make camera.provider 2.4 -j4 |
编译成功,生成 camera.sm8450.so |
| QNX 工具链 | qcc --version |
显示 QNX C 编译器版本 7.1.x |
| QNX Camera 服务 | camxhal -v |
打印 CHI 版本号和已加载 sensor 列表 |
| 双系统通信 | QNX 侧 echo "test" > /dev/camera/ipc |
Android 侧通过 vdev 收到消息 |
ccache 可以进一步加速。