2. 开发环境搭建:高通平台Camera开发板选型、Linux驱动环境配置、Android源码编译环境搭建

本章聚焦于高通Camera HAL3适配工程的硬件底座与软件栈搭建。正确的开发板选型、干净的Linux驱动环境以及可复现的Android源码编译环境,是后续所有HAL层调试与适配工作的前提。我们将按照“硬件选型 → 驱动环境 → 编译环境”的递进路径,逐一拆解关键步骤与避坑要点。

核心原则:开发环境搭建的成败直接决定HAL3适配周期。建议在开始前确认以下三点:① 开发板SoC型号与目标产品一致;② Linux内核版本与高通BSP匹配;③ Android源码分支与HAL3接口规范对齐。

2.1 高通平台Camera开发板选型

高通平台Camera开发板选型需综合考虑SoC算力、ISP能力、MIPI CSI接口数量、驱动生态成熟度以及成本。下表对比了当前主流的几款高通Camera开发板,适用于HAL3适配工程。

开发板型号 SoC ISP能力 MIPI CSI Lane 推荐场景
Qualcomm RB5 QCS8250 双14-bit ISP,支持4K@60fps 4路4-lane 机器人、AI相机、多摄融合
Qualcomm RB3 QCS603/605 单14-bit ISP,支持1080p@60fps 2路4-lane 智能门锁、低功耗摄像头
Thundercomm TurboX D845 SDM845 双14-bit ISP,支持4K@30fps 3路4-lane 手机原型、平板Camera验证
Thundercomm TurboX D920 QCS6490 三14-bit ISP,支持8K@30fps 4路4-lane + 2路2-lane 高端AI相机、车载环视
选型建议:对于HAL3适配入门,推荐使用Qualcomm RB5或Thundercomm TurboX D845。这两款开发板的BSP文档齐全,社区支持活跃,且Camera驱动框架与高通最新HAL3接口兼容性最好。

选型时还需关注以下硬件细节:

  • MIPI CSI接口类型:确认开发板支持MIPI D-PHY还是C-PHY,以及lane数是否满足目标sensor带宽需求。
  • PMIC电源管理:Camera sensor的AVDD、DVDD、IOVDD供电是否可编程,是否支持独立上电时序控制。
  • EEPROM/OTP支持:开发板是否预留I2C接口用于读取sensor校准数据,这对HAL3的camera_metadata生成至关重要。
  • 调试接口:至少需要1路UART用于kernel log输出,1路USB Type-C用于ADB调试。
高通Camera开发板硬件架构图 SoC (QCS8250) ISP + DSP + GPU MIPI CSI 0 4-lane D-PHY MIPI CSI 1 4-lane D-PHY MIPI CSI 2 4-lane D-PHY MIPI CSI 3 2-lane D-PHY EEPROM (I2C) PMIC (电源) UART (调试) USB Type-C 说明:MIPI CSI接口数量与lane配置直接影响多摄方案选型,建议预留至少2路4-lane用于HAL3多Camera适配验证

2.2 Linux驱动环境配置

高通Camera HAL3依赖Linux内核提供的V4L2(Video for Linux 2)框架以及高通私有的Camera Subsystem驱动。驱动环境配置分为内核配置、设备树修改、驱动编译与加载三个步骤。

2.2.1 内核配置要点

在Linux内核源码目录下执行 make menuconfig,确保以下选项被启用:

配置项 路径 说明
CONFIG_MEDIA_SUPPORT Device Drivers → Multimedia support 多媒体框架总开关
CONFIG_V4L2 Multimedia support → V4L2 V4L2核心框架
CONFIG_VIDEO_QCOM_CAMSS Multimedia support → Qualcomm camera drivers 高通Camera Subsystem驱动
CONFIG_MSM_CCI Multimedia support → Qualcomm CCI Camera控制接口(I2C/SPI)
CONFIG_MSM_CSIPHY Multimedia support → Qualcomm CSIPHY MIPI CSI物理层驱动
CONFIG_MSM_CSID Multimedia support → Qualcomm CSID MIPI CSI解码器驱动
常见错误:如果漏选 CONFIG_VIDEO_QCOM_CAMSS,HAL3在open camera时会出现 E/Camera3: openCamera: failed to open camera device 错误,且dmesg中无任何sensor probe信息。务必在编译前确认该选项已编译为模块或内建。

2.2.2 设备树(DTS)配置

设备树是连接硬件与驱动的桥梁。Camera节点通常定义在 arch/arm64/boot/dts/qcom/ 目录下。以下是一个典型的Camera sensor设备树节点示例:

// 文件: qcs8250-camera.dtsi
&cam_cci0 {
    status = "okay";

    sensor0: camera@10 {
        compatible = "sony,imx586";
        reg = <0x10>;
        cci-master = <0>;
        clocks = <&camcc CAM_CC_MCLK0_CLK>;
        clock-names = "cam_mclk";
        clock-frequency = <24000000>;

        avdd-supply = <&pm8150_l17>;
        dvdd-supply = <&pm8150_l18>;
        iovdd-supply = <&pm8150_l6>;

        port {
            sensor0_ep: endpoint {
                remote-endpoint = <&csiphy0_ep>;
                data-lanes = <1 2 3 4>;
                link-frequencies = /bits/ 64 <480000000>;
            };
        };
    };
};

设备树配置完成后,使用 make dtbs 编译生成dtb文件,并烧录到开发板。

2.2.3 驱动编译与加载验证

驱动编译推荐使用交叉编译工具链。以下为基于高通SDK的编译流程:

# 设置交叉编译环境
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
export PATH=$PATH:/opt/qcom/toolchain/bin

# 编译内核及驱动模块
make defconfig  # 使用高通默认配置
make -j$(nproc) Image.gz dtbs modules

# 将驱动模块安装到rootfs
make modules_install INSTALL_MOD_PATH=/path/to/rootfs

# 验证驱动加载
adb shell "dmesg | grep -i camera"
# 预期输出: [    1.234567] qcom-camss 1c00000.camss: probe successful
#            [    1.345678] imx586 0-0010: sensor initialized
调试技巧:如果驱动加载失败,优先检查 dmesg 中的 EPROBE_DEFER 信息。这通常表示sensor依赖的时钟或电源尚未就绪。可以通过 cat /sys/kernel/debug/device_deferred 查看被延迟挂载的设备列表。
Linux Camera驱动环境配置流程 步骤1: 内核配置 make menuconfig 步骤2: 设备树配置 修改 .dtsi 文件 步骤3: 驱动编译 make -j$(nproc) 步骤4 烧录验证 验证命令: dmesg | grep -i camera 预期输出: probe successful / sensor initialized

2.3 Android源码编译环境搭建

Android源码编译环境是HAL3适配的核心工作台。高通平台通常使用 Qualcomm LE(Linux Embedded) 或 Android AOSP 作为基础系统。以下以Android 13(API 33)为例,说明编译环境的完整搭建步骤。

2.3.1 主机环境要求

项目 最低要求 推荐配置
操作系统 Ubuntu 20.04 LTS Ubuntu 22.04 LTS
CPU核心数 8核 16核及以上
内存 16 GB 32 GB
磁盘空间 250 GB(SSD) 500 GB(NVMe SSD)
Python版本 3.8 3.10
JDK版本 OpenJDK 11 OpenJDK 17

2.3.2 安装依赖包

# 更新软件源
sudo apt update && sudo apt upgrade -y

# 安装Android编译基础依赖
sudo apt install -y git-core gnupg flex bison build-essential \
    zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
    libncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev \
    libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

# 安装repo工具
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=$PATH:~/bin

2.3.3 下载高通BSP与Android源码

高通平台需要同时下载AOSP源码和高通BSP(Board Support Package)。BSP包含Camera HAL、驱动、固件等闭源二进制文件。

# 创建工作目录
mkdir -p ~/qcom_android13 && cd ~/qcom_android13

# 初始化repo仓库(使用高通manifest)
repo init -u https://source.codeaurora.org/quic/la/platform/manifest \
    -b release -m LA.UM.9.15.r1-10000-KAMORTA.0.xml

# 同步源码(耗时较长,建议使用 -j4 避免网络超时)
repo sync -j4 -c --no-tags

# 下载高通BSP(需签署NDA后从高通QDN获取)
# 将BSP包解压到 vendor/qcom/ 目录
tar -xzf qcom_bsp_android13.tar.gz -C vendor/qcom/
重要提示:高通BSP中的Camera HAL库(如 vendor/qcom/proprietary/camera)是闭源的,且与Android版本严格绑定。如果BSP版本与AOSP版本不匹配,编译时会出现 undefined reference to 'camera3_ops' 等链接错误。务必确认manifest中的BSP tag与AOSP tag一致。

2.3.4 编译Android系统与Camera HAL

# 设置编译环境
source build/envsetup.sh

# 选择目标设备(以RB5为例)
lunch qcs8250-userdebug

# 编译整个系统(首次编译约2-4小时)
make -j$(nproc) 2>&1 | tee build.log

# 单独编译Camera HAL模块(调试阶段常用)
make -j$(nproc) camera.qcom

# 编译完成后,输出镜像位于 out/target/product/qcs8250/
ls out/target/product/qcs8250/*.img

2.3.5 刷机与验证

# 进入fastboot模式(开发板按住VOL-键上电)
adb reboot bootloader

# 刷入所有分区
fastboot flash boot boot.img
fastboot flash system system.img
fastboot flash vendor vendor.img
fastboot flash dtbo dtbo.img
fastboot reboot

# 验证Camera HAL版本
adb shell "dumpsys media.camera | grep -i hal"
# 预期输出: Camera HAL version: 3.4
效率提升:在HAL3适配阶段,建议使用 make -j$(nproc) camera.qcom 单独编译Camera模块,然后通过 adb push 将编译产物推送到开发板的 /vendor/lib/hw/ 目录,无需每次都刷全系统镜像。例如:
adb push out/target/product/qcs8250/vendor/lib/hw/camera.qcom.so /vendor/lib/hw/
Android源码编译环境搭建流程 阶段1 主机环境准备 Ubuntu + 依赖包 阶段2 源码下载 repo sync + BSP 阶段3 编译系统 lunch + make 阶段4 刷机验证 fastboot flash 调试循环: 修改HAL代码 → 单独编译camera.qcom → adb push到vendor分区 → 重启cameraserver验证

2.4 环境验证清单

在进入HAL3适配工程之前,建议逐项确认以下环境就绪状态:

检查项 验证方法 预期结果
开发板启动 串口观察U-Boot及kernel启动log 无panic,文件系统挂载正常
Camera驱动加载 dmesg | grep -i camera 显示probe successful
V4L2设备节点 ls /dev/video* 至少出现 /dev/video0
Android HAL版本 dumpsys media.camera | grep HAL Camera HAL version: 3.x
Camera服务运行 ps -A | grep cameraserver cameraserver进程存在
ADB连接 adb devices 设备状态为device
环境就绪标志:当上述6项检查全部通过时,说明开发环境已完全就绪,可以进入第3章“高通Camera HAL3框架解析与代码导读”的学习。