3. 开发环境搭建:高通Camera SDK安装、QCT工具链配置、ADB与日志抓取、CHI XML编译与推送流程
本章节聚焦于搭建一套完整的高通Camera CHI开发环境。环境搭建是后续所有XML参数调优工作的基础,一个稳定、可复现的开发环境能大幅减少调试过程中的干扰因素。我们将按照从底层工具链到上层调试流程的顺序,逐步完成SDK安装、工具链配置、日志抓取以及XML编译推送的完整闭环。
3.1 高通Camera SDK安装
高通Camera SDK是进行CHI开发的核心软件包,它包含了头文件、库文件、文档以及示例代码。SDK通常以压缩包形式由高通或设备厂商提供,版本需与目标平台的基线(Baseline)严格对应。
3.1.1 SDK目录结构解析
一个标准的Camera SDK解压后,其核心目录结构如下表所示。理解每个目录的作用,有助于后续快速定位所需文件。
| 目录/文件 | 说明 | 调优工程师关注点 |
|---|---|---|
camx/ |
Camera eXtension (CAMX) 核心框架源码 | 了解Pipeline创建流程,但通常不修改 |
chi-cdk/ |
CHI开发套件,包含Usecase、Node、XML Schema | 核心工作目录,所有XML文件在此定义 |
oem/qti/ |
OEM/ODM定制层,存放厂商特定的XML和算法集成 | 厂商调优XML存放位置,如sensor、tuning文件 |
tools/ |
调试与测试工具,如CHI Tuning Tool、Sensor Tool | 用于在线调试和参数验证 |
docs/ |
API参考手册、架构文档、Release Notes | 查阅XML节点定义和属性约束 |
3.1.2 安装步骤
- 解压SDK: 将SDK压缩包(如
QCAMERA_SDK_xxx.zip)放置于工作目录,执行unzip QCAMERA_SDK_xxx.zip -d ~/workspace/qcamera_sdk。 - 设置环境变量: 将SDK路径添加到
~/.bashrc或~/.zshrc中,以便编译脚本能够找到头文件和库。export CAMX_SDK_PATH=~/workspace/qcamera_sdk export CHI_CDK_PATH=${CAMX_SDK_PATH}/chi-cdk export PATH=${CAMX_SDK_PATH}/tools:$PATH - 验证安装: 检查关键头文件是否存在。
ls ${CHI_CDK_PATH}/include/chi*.h # 预期输出:chi_api.h chi_metadata.h chi_isp.h ...
LA.VENDOR.1.0 基线,则SDK也必须是对应的 LA.VENDOR.1.0 版本。版本不匹配会导致运行时API调用失败或行为异常。
3.2 QCT工具链配置
QCT(Qualcomm Configuration Tool)工具链是连接XML配置与底层硬件的桥梁。它包含编译器、链接器以及用于生成最终二进制配置文件的工具。正确配置工具链是确保XML能被设备正确解析的前提。
3.2.1 工具链组件
QCT工具链主要由以下组件构成:
- XML Schema Validator (xsdvalidate): 用于检查XML文件是否符合CHI架构的Schema定义,是编译前的第一道关卡。
- CHI XML Compiler (chixmlcompiler): 将符合Schema的XML文件编译成二进制blob文件(.bin或.mcf),设备驱动直接加载这些二进制文件。
- Image打包工具 (mkimage): 将编译好的二进制blob打包成可用于刷写的镜像文件(如
camera_config.img)。
3.2.2 配置步骤
- 安装依赖: 工具链通常依赖Python 3.8+、libxml2和libxslt。
sudo apt-get update sudo apt-get install python3 python3-pip libxml2-utils xsltproc pip3 install lxml - 设置工具链路径: 将工具链的
bin目录添加到PATH环境变量。export QCT_TOOLS_PATH=${CAMX_SDK_PATH}/tools/qct export PATH=${QCT_TOOLS_PATH}/bin:$PATH - 验证工具链: 运行编译器查看帮助信息,确认安装成功。
chixmlcompiler --help # 预期输出:CHI XML Compiler v2.0.0 ...
chixmlcompiler 提示 libpython3.8.so.1.0: cannot open shared object file,说明Python库路径未正确设置。请执行 export LD_LIBRARY_PATH=${QCT_TOOLS_PATH}/lib:$LD_LIBRARY_PATH 并重新尝试。
3.3 ADB与日志抓取
ADB(Android Debug Bridge)是连接开发主机与Android设备的通用调试工具。在Camera调优中,ADB主要用于推送编译后的XML文件、抓取Camera驱动日志(logcat)以及执行调试命令。
3.3.1 ADB环境配置
- 安装ADB: 在Ubuntu上通过apt安装。
sudo apt-get install android-tools-adb android-tools-fastboot - 设备连接: 使用USB线连接设备,并确保设备已开启“开发者选项”和“USB调试”。
adb devices # 预期输出:List of devices attached # 0123456789ABCDEF device - 获取Root权限: 大部分调优操作需要root权限。
adb root adb remount # 重新挂载系统分区为可读写
3.3.2 Camera日志抓取
Camera相关的日志主要来自 camx 和 chi 两个进程。使用logcat配合过滤器可以高效定位问题。
- 抓取所有Camera日志:
adb logcat -c # 清除旧日志 adb logcat -v threadtime camx:V chi:V CHIUSECASE:V *:S > camera_log.txt - 抓取特定Tag的日志: 例如,只查看XML解析相关的日志。
adb logcat -v threadtime CHICONFIG:V *:S - 启用驱动层详细日志: 通过设置属性来增加日志输出级别。
adb shell setprop persist.vendor.camera.logs 0x1F # 开启所有日志级别 adb shell setprop persist.vendor.camera.chilog 0x1F
[CHICONFIG] 或 [CAMX] 标签,并伴随 ERROR 或 FATAL 级别的信息。例如,ERROR: CHICONFIG: Failed to parse XML node 'Pipeline' 表明Pipeline节点定义有误。
3.4 CHI XML编译与推送流程
这是开发环境搭建的核心环节,也是日常调优工作中最频繁的操作。一个高效的编译-推送-验证循环,能显著提升调优效率。
3.4.1 编译流程
编译过程通常通过Makefile或Python脚本自动化完成。以下是一个典型的编译命令示例:
# 进入CHI CDK目录
cd ${CHI_CDK_PATH}
# 执行编译脚本,指定目标平台和传感器
python3 build.py --target pineapple --sensor imx890
# 编译成功后,输出文件位于 output/ 目录
ls output/
# camera_config.bin sensor_config.bin tuning.bin
3.4.2 推送流程
编译完成后,需要将生成的二进制文件推送到设备的正确分区。推送后通常需要重启Camera HAL服务或重启设备才能生效。
- 推送配置文件:
adb push output/camera_config.bin /vendor/etc/camera/ adb push output/sensor_config.bin /vendor/etc/camera/ adb push output/tuning.bin /vendor/etc/camera/ - 重启Camera服务:
adb shell pkill -f cameraserver # 或者重启HAL服务 adb shell setprop ctl.restart vendor.camera-provider-2-7 - 验证推送结果: 重新抓取日志,确认新配置被加载。
adb logcat -v threadtime CHICONFIG:V *:S | grep "Loading config" # 预期输出:CHICONFIG: Loading config from /vendor/etc/camera/camera_config.bin
Permission denied,请确保已执行 adb root 和 adb remount。如果 remount 失败,可以尝试 adb disable-verity 并重启设备。
3.5 环境验证清单
在开始正式的XML调优工作之前,建议使用以下清单对环境进行最终验证,确保所有环节都已正确配置。
| 检查项 | 验证命令/方法 | 预期结果 |
|---|---|---|
| SDK路径 | echo $CAMX_SDK_PATH |
显示正确的SDK路径 |
| 工具链 | chixmlcompiler --version |
显示版本号,无报错 |
| ADB连接 | adb devices |
显示设备序列号,状态为 device |
| Root权限 | adb shell su -c "id" |
显示 uid=0(root) |
| 日志抓取 | adb logcat -d | grep "camx" |
输出包含camx进程的日志行 |
| 编译测试 | 执行一次空XML编译 | 生成 camera_config.bin 文件 |
| 推送测试 | adb push test.bin /vendor/etc/camera/ |
推送成功,无权限错误 |
setup_env.sh),每次打开新终端时执行 source setup_env.sh,确保环境一致性。