1. 高通Camera HAL架构概述
高通平台Camera子系统采用分层解耦的软件架构,从上至下依次为应用层、HAL层、内核驱动层(KMD)和硬件层。理解这一分层模型是进行HAL层移植与性能调优的基础。本章将系统阐述高通Camera HAL的整体架构、分层职责及数据流路径。
1.1 分层模型与核心组件
高通Camera软件栈遵循Android HAL接口规范,同时针对骁龙平台进行了深度定制与扩展。整体架构分为三个主要层次:
| 层次 | 组件/模块 | 主要职责 | 运行空间 |
|---|---|---|---|
| UML(User-Mode Layer) | Camera HAL3/CHI、Provider、Session、Pipeline | 实现Android Camera API、流管理、请求调度、3A算法集成、后处理管线 | 用户空间(User Space) |
| KMD(Kernel-Mode Driver) | V4L2驱动、ISP驱动、JPEG驱动、传感器驱动 | 硬件抽象、中断处理、Buffer管理、时钟/电源控制 | 内核空间(Kernel Space) |
| 硬件层(Hardware) | ISP(图像信号处理器)、传感器、闪光灯、马达 | 物理图像采集、信号转换、机械控制 | 物理设备 |
关键概念:高通从Android 8.0开始逐步从传统的QCamera HAL迁移到CHI(Camera Hardware Interface)架构。CHI架构通过可配置的XML/JSON管线描述文件,实现了HAL层逻辑的模块化与可扩展性,大幅降低了平台适配的工作量。
1.2 高通Camera HAL软件架构图
下图展示了高通Camera HAL的完整分层结构与核心模块间的交互关系:
架构要点:高通Camera HAL层(UML)是移植工作的核心区域。CHI架构下,HAL层不再直接操作硬件寄存器,而是通过定义好的Pipeline节点图(Node Graph)来编排图像处理流程。开发者只需编写或修改节点描述文件,即可完成大部分功能适配。
1.3 数据流路径详解
一次完整的Camera数据流从应用层发起Capture Request开始,到最终图像帧返回给应用结束。数据流路径贯穿三个层次,涉及多个关键节点:
- 请求发起(Framework → HAL):应用通过CameraManager创建CaptureSession,提交CaptureRequest。HAL层接收请求后,解析Stream配置与参数。
- 管线调度(HAL内部):CHI Pipeline根据请求配置,选择对应的Node Graph。每个Node代表一个处理单元(如Sensor节点、ISP节点、JPEG节点)。
- 硬件控制(HAL → KMD):HAL通过V4L2 ioctl或自定义接口向KMD下发控制命令,包括传感器配置、ISP参数、Buffer地址等。
- 图像采集(KMD → 硬件):KMD驱动硬件完成曝光、读出、ISP处理,生成原始图像数据或YUV/JPEG数据。
- 数据回传(KMD → HAL → Framework):KMD通过DMA将图像数据写入预分配的Buffer,通过V4L2 DQBUF机制通知HAL。HAL完成后处理后,将结果返回给Framework。
1.4 关键数据流路径图
以下SVG图展示了从Capture Request到图像帧返回的完整数据流路径:
1.5 各层核心职责与接口
下表总结了各层的关键接口与职责,便于移植时快速定位需要修改的模块:
| 层次 | 核心接口/文件 | 移植关注点 |
|---|---|---|
| UML - HAL | camera_device_t, camera3_device_ops_t, CHIAPI |
实现process_capture_request、configure_streams、flush等接口;配置Pipeline XML |
| UML - CHI | chi_ops_t, chi_pipeline_ops_t, node_xml |
定义Node Graph、配置Sensor/ISP/JPEG节点参数、3A算法集成 |
| KMD | v4l2_subdev_ops, media_controller, msm_isp |
适配Sensor驱动、ISP寄存器配置、Buffer分配与同步、电源管理 |
| 硬件 | I2C/SPI寄存器、MIPI CSI接口、GPIO | 传感器初始化序列、时钟配置、上电时序、MIPI Lane速率 |
移植常见陷阱:在HAL层移植过程中,最容易出现的问题是UML与KMD之间的接口不匹配。例如,HAL层下发的Buffer格式(如NV12、RAW10)与KMD/ISP硬件支持的格式不一致,会导致黑屏或图像撕裂。务必在移植初期确认各层的格式协商机制。
1.6 高通Camera HAL架构演进
了解架构的演进历史有助于理解当前CHI架构的设计思路:
- QCamera HAL(Android 7.x及之前):单体式架构,所有逻辑集中在
mm-camera库中,移植工作量大,代码耦合度高。 - CHI架构(Android 8.0+):引入可配置的Pipeline节点图,将硬件适配与算法逻辑解耦。HAL层通过加载XML描述文件来定义处理流程,无需修改C++代码即可完成大部分功能调整。
- CHI v2/v3(Android 10+):进一步优化节点调度性能,支持多Camera并发、实时管线切换、以及更灵活的Buffer管理策略。
课程重点:本课程后续章节将围绕CHI架构展开,重点讲解如何编写Pipeline XML描述文件、如何适配新的Sensor节点、以及如何通过性能验证工具(如Camera Profiler、Perfetto)来评估HAL层移植后的帧率、延迟和功耗表现。