Camera驱动框架
该驱动框架模型内部分为三层,依次为HDI实现层、框架层和设备适配层:
- HDI实现层:实现OHOS(OpenHarmony Operation System)相机标准南向接口。
- 框架层:对接HDI实现层的控制、流的转发,实现数据通路的搭建,管理相机各个硬件设备等功能。
- 设备适配层:屏蔽底层芯片和OS(Operation System)差异,支持多平台适配。
Camera模块主要包含服务、设备的初始化,数据通路的搭建,流的配置、创建、下发、捕获等。
基于HDF驱动框架的Camera驱动模型。
目前,Camera驱动框架主要提供了两种适配方式:V4L2和MPP。
- MPP方式主要是针对海思系列的芯片,MPP是海思自己实现的多媒体框架,之前有介绍,具体可参见:《鸿蒙开发学习指南》
- V4L2方式主要是针对Camera驱动是基于V4L2接口实现的芯片平台,比如Rockchip,展锐等
如果其他芯片平台想适配OH的Camera驱动框架,如果是V4L2实现可参考Rockchip的适配方式,如果是私有实现(比如ioctl方式)则需要自己重新添加新的适配层。
下面是展锐SL8541E平台在OH下的Camera适配框图,更详细,参考Rockchip方案适配的,都是基于V4L2,所以很类似:
Camera 驱动框架所在源码目录为:drivers/peripheral/camera
由上可以看出,Camera 驱动框架最核心的3部分:
- pipeline
- device_manager
- driver_adapter
pipeline控制管理各个硬件模块,首先要获取对应设备的manager,通过manager获取其对应的controller,controller和对应的驱动进行交互
V4L2的适配
这里我们主要看下基于V4L2的适配,以rk3568为例,主要涉及到如下几块:
- platform平台通用公共代码: drivers/peripheral/camera/hal/adapter/platform/v4l2
- chipset定制化代码: device/board/hihope/rk3568/camera/
- hcs配置文件: vendor/hihope/rk3568/hdf_config/uhdf/camera
platform公共代码
platform为平台性公共代码,如linux标准v4l2适配接口定义,为v4l2框架适配的通用node.以及为v4l2框架适配的通用device_manager等
目录结构如下:
- device_manager
device_manager 目录存放着向北与pipeline向南与v4l2 adapter交互的代码。
- driver_adapter
driver_adapter 目录中存放着v4l2协议相关代码。可通过它们实现与v4l2底层驱动交互。
- pipeline_core
Pipeline_core 目录与 drivers/peripheral/camera/hal/pipeline_core中代码组合为pipeline框架。v4l2_source_node 和 uvc_node为v4l2框架适配的通用node。
chipset定制化代码
chipset为具体某芯片平台相关代码。
目录结构如下:
device_manager目录下存放了rk3568适配过的sensor的相关配置文件,适配的camera sensor 读取设备能力的代码及相关配置文件,其中 project_hardware.h 比较关键,存放了device_manager支持当前chipset的设备列表
pipeline_core路径下存放了由chipset开发者为满足特点需求增加的pipeline node等。
hcs配置文件
- device_info
vendor/hihope/rk3568/hdf_config/uhdf/device_info.hcs
- config
vendor/hihope/rk3568/hdf_config/uhdf/camera
- hdi_impl下的 camera_host_config.hcs为物理/逻辑Camera配置、能力配置,此处的物理/逻辑Camera配置,需要在hal内部使用,逻辑Camera及能力配置需要上报给上层,需按照所适配的芯片产品添加其能力配置。
- pipeline_core下的 config.hcs为pipeline的连接方式,按场景划分每一路流由哪些Node组成,其连接方式是怎样的。使用或新增的node需要在代码中注册。
- param.hcs为场景、流类型名及其id定义,pipeline内部是以流id区分流类型的,所以此处需要添加定义。
因config配置文件里面内容比较多,这里就举例了,具体可自行看源码
总结
以上的内容只是简单介绍了OpenHarmony南向的Camera框架,没有具体到代码分析,移植等细节。
要想成为一名鸿蒙高级开发,以上知识点是必须要掌握的,除此之外,还需要掌握一些鸿蒙应用开发相关的一些技术,需要我们共同去探索。
为了节省大家一些查找的时间,这边联合几位行业大佬,为大家准备了一份《鸿蒙南北双向开发》的学习导图,从入门到进阶再到南向开发实战的一整套完整体系,想要学习了解更多鸿蒙开发的相关知识可以借鉴:《鸿蒙开发学习指南》
除了上面整理的思维导图以外,这里还特别整理的一份《鸿蒙 (Harmony OS)开发学习手册》给大家进行参考学习:
一、入门必看
1. 应用开发导读(ArkTS)
2. ……
二、HarmonyOS 概念
1. 系统定义
2. 技术架构
3. 技术特性
4. 系统安全
5........
三、如何快速入门?
1. 基本概念
2. 构建第一个ArkTS应用
3. 构建第一个JS应用
4. ……
四、开发基础知识
1. 应用基础知识
2. 配置文件
3. 应用数据管理
4. 应用安全管理
5. 应用隐私保护
6. 三方应用调用管控机制
7. 资源分类与访问
8. 学习ArkTS语言
9. ……
五、基于ArkTS 开发
1. Ability开发
2. UI开发
3. 公共事件与通知
4. 窗口管理
5. 媒体
6. 安全
7. 网络与链接
8. 电话服务
9. 数据管理
10. 后台任务(Background Task)管理
11. 设备管理
12. 设备使用信息统计
13. DFX
14. 国际化开发
15. 折叠屏系列
16. ……
更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙开发学习指南》