第一次接触高通Camera驱动开发时,面对vendor目录下密密麻麻的代码文件,我完全找不到北。camx、chi-cdk、hal3这些目录之间到底有什么关系?哪些文件才是核心?后来发现,用Source Insight建立清晰的代码索引是最高效的入门方式。本文将分享如何从零搭建Camx开发环境,并附上经过实战验证的关键文件清单。
在开始导入代码前,需要准备好基础开发环境。推荐使用Windows 10/11系统,搭配Source Insight 4.0以上版本。以下是必备工具清单:
- Source Insight 4.0+:代码阅读和导航的核心工具
- Git for Windows:用于拉取高通平台代码
- Python 3.8+:部分编译脚本依赖
- Notepad++:辅助编辑配置文件和脚本
提示:Source Insight的符号解析功能对C++11支持有限,建议关闭C++11相关选项以避免解析错误
配置Source Insight的基础参数:
- 打开Options → Preferences → Languages → C/C++
- 取消勾选"Parse C++11 standard library types"
- 设置Tab宽度为4(与高通代码规范一致)
# 高通代码仓库克隆示例
git clone https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/camera-kernel.git
高通Camera驱动代码主要分布在两个核心目录:
2.1 Camx核心框架
路径:vendor/qcom/proprietary/camx/
├── src/
│ ├── core/ # 核心框架实现
│ ├── hwl/ # 硬件抽象层
│ ├── swl/ # 软件算法层
│ └── chi/ # CHI接口映射
├── api/ # 对外接口定义
└── build/ # 编译系统
2.2 CHI-CDK扩展框架
路径:vendor/qcom/proprietary/chi-cdk/
├── vendor/
│ ├── chioverride/ # HAL3扩展实现
│ ├── node/ # 处理节点实现
│ └── topology/ # 管道配置XML
└── oem/
├── actuator/ # 马达驱动
└── sensor/ # 传感器配置
3.1 创建基础工程
- 新建工程,命名为"Camx_Dev"
- 设置代码根目录为高通平台vendor路径
- 添加以下文件类型:
*.c;*.cpp;*.h;*.hpp*.java(部分JNI接口需要)*.mk;*.rc(编译脚本)
3.2 关键文件导入清单
下表列出了必须导入的核心文件及其作用:
camx/src/core/hal/camxhal3entry.cppchi-cdk/vendor/chioverride/chxextensioninterface.cppcamx/src/core/camxhal3module.hcamx/src/hwl/ife/camxifenode.cppchi-cdk/vendor/node/cvp/cvpnode.cpp3.3 符号解析配置
在工程属性中添加以下宏定义,确保正确解析代码:
#define _LINUX 1
#define _CAMX_ 1
#define _CHISTD_ 1
注意:Camx代码中大量使用模板和继承,建议在Source Insight中开启"Parse all files when project opens"选项
4.1 建立核心符号关系图
- 通过Relation Window追踪
CamX::Initialize调用链 - 使用Context Window查看
g_Camera3DeviceOps结构体定义 - 对以下关键类建立书签:
Camera3DevicePipelineSession
4.2 典型代码阅读路径
以处理一帧图像为例的代码追踪路线:
camxhal3entry.cpp→process_capture_requestcamxpipeline.cpp→ProcessRequestcamxnode.cpp→ExecuteProcessRequestcamxifenode.cpp→Execute
// 典型调用流程示例
VOID Node::ExecuteProcessRequest(
ExecuteProcessRequestData* pExecuteProcessRequestData)
{
// 预处理逻辑
ProcessRequest(pExecuteProcessRequestData);
// 提交到硬件队列
m_pHwContext->Submit(/*...*/);
}
5.1 常用日志过滤技巧
高通Camera驱动使用以下日志标签:
CAMX_DEBUG:核心框架日志CHX_DEBUG:CHI扩展日志HAL_DEBUG:硬件抽象层日志
在logcat中过滤关键信息:
adb logcat -s CAMX_DEBUG,CHX_DEBUG,HAL_DEBUG
5.2 常见问题解决方案
6.1 自定义节点开发
- 在
chi-cdk/vendor/node/下创建新节点目录 - 实现标准节点接口:
class MyCustomNode : public ChiNodeInterface { public: CDKResult Create(); CDKResult Execute(NodeProcessRequestData* pData); //... }; - 在topology XML中添加节点配置
6.2 性能分析工具
- Camx Profiler:内置性能统计工具
- QTI Trace:高通专用性能分析工具
- Perfetto:系统级性能跟踪
以下是经过验证的完整文件清单(基于SM8450平台):
核心框架文件:
vendor/qcom/proprietary/camx/src/
├── core/
│ ├── camxhal3entry.cpp
│ ├── camxhal3module.h
│ ├── camxpipeline.cpp
│ └── camxsession.cpp
├── hwl/
│ ├── ife/camxifenode.cpp
│ └── ipe/camxipenode.cpp
└── chi/
├── camxchitypes.h
└── camxchinode.cpp
CHI扩展文件:
vendor/qcom/proprietary/chi-cdk/vendor/
├── chioverride/
│ ├── chxextensioninterface.cpp
│ └── chxusecase.cpp
├── node/
│ ├── fd/chxfddetectnode.cpp
│ └── bps/chxbpsnode.cpp
└── topology/
├── preview.xml
└── video.xml
硬件配置:
vendor/qcom/proprietary/chi-cdk/oem/
├── sensor/
│ ├── imx586.xml
│ └── ov64b40.cpp
└── actuator/
├── dw9800v.cpp
└── lc898217xc.cpp










