[文章]HDF Camera 驱动模型解析

阅读量0
0
4
作者:润和-徐大为

1.Camera驱动概述
相机系统对外向用户提供预览、拍照以及录像等功能。内部简单可分为3层:应用层(app&service)、相机驱动框架模型(CDDM)、硬件层(isp&sensor)。
本次要介绍的对象为相机驱动框架模型(CDDM)。为了保持对多个设备制造商和图像信号处理器(ISP,或者camera sensor)供应商之间的跨平台兼容性,camera流水线模块是虚拟的,并没有直接对应任何真实的ISP。但是,它与真实的处理流水线很相似,以便你能够高效地将它映射到你的硬件。camera驱动框架层为camera子系统包括camera流水线上各个组件的实现提供了接口,它将CameraService与底层的camera驱动、camera硬件模块连接起来,向上屏蔽底层差异,向下传递上层应用的请求。应用通过调用硬件抽象层提供的接口来控制camera硬件以实现特定功能。


2.Camera驱动框架介绍
相机驱动框架模型对上实现相机HDI接口,对下实现相机Pipeline模型,管理相机各个硬件设备。


各层的基本概念如下:

  • HDI实现层,对上实现HOS相机标准南向接口。
  • 框架层,对接HDI实现层的控制、流的转发,实现数据通路的搭建、管理相机各个硬件设备等功能。
  • 适配层,屏蔽底层芯片和OS差异,支持多平台适配。

13.png

图1 Camera驱动框架模型

如图1所示,驱动框架主要由Hdi、PipelineCore、DeviceManager、Platform Adapter、BufferManager以及Utils六个部分组成。


1.Hdi
Hdi向上用于实现HDI接口,向下调用平台层的接口,完成HDI接口任务的转发。


2.PipelineCore
PipelineCore向上提供接口给HDI实现层,往下调度节点的各个接口完成当前业务功  能。其本身依赖hcs等配置文件,解析pipeline的连接情况,参数设置等,负责pipeline创建、动态修改、销毁,同时支持按一定顺序调度pipeline上各个节点,如节点的开始、配置、结束等接口。


3.DeviceManager
DeviceManager模块通过调用底层硬件适配层接口,其完成底层设备树的创建和管理(通过枚举方式或者静态配置方式),向上提供底层设备能力查询以及UVC-Camera监听和上报的接口,向下传递上层控制指令和参数。为第三方芯片提供统一的硬件通路接口,方便第三方通过适配标准接口参数和增加上层适配代码,实现三方芯片特有的功能。


4.PlatformAdapter
PlatformAdapter模块主要负责适配不同平台,向上屏蔽平台差异。


5.BufferManager
BufferManager主要有三部分功能:

(1)屏蔽不同内存管理的差异,为本子系统提供统一的操作接口。兼容多种内存形式,如GBM/ION,同时支持从系统heap申请内存等。
(2)子系统内部提供统一的buffer类,屏蔽GBM buffer,ION buffer等,为子系统提供统一的buffer申请/释放等接口。
(3)pipeline在运转时最关键的是buffer轮转,为了 统一管理,BufferManager提供bufferpool并保证bufferpool中的buffer正常轮转,同时提供buffer轮转的监控功能。

6.Utils
Utils模块提供框架所需的工具文件。


3.Camera驱动框架适配指导
3.1 Camera驱动框架配置
Hi3516DV300 配置文件路径:        /vendor/hisilicon/Hi3516DV300/hdf_config/uhdf/device_info.hcs 。说明:其他平台可参考Hi3516DV300适配。
14.png


参数说明:
  • host,一个host节点即为一个独立进程,如果需要独立进程,新增属于自己的host节点
  • policy, 服务发布策略,HDI服务请设置为2
  • moduleName, 驱动实现库名
  • serviceName,服务名称,请保持全局唯一性

3.2 camera_host驱动实现入口
文件路径:drivers/peripheral/camera/interfaces/include/server/camera_host_driver.cpp
15.png


分发设备服务消息
  • cmd Id:请求消息命令字
  • Data:其他服务或者IO请求数据
  • Reply:存储返回消息内容数据
16.png


绑定设备服务
  • 初始化设备服务对象
  • 初始化设备资源对象
17.png


驱动初始化函数
  • 探测并初始化驱动程序
18.png


驱动资源释放函数
  • 如已经绑定的设备服务对象
19.png


定义驱动描述符
  • 将驱动代码注册给驱动框架。

3.3  Camera配置信息结束
1)Camera模块内部,所有配置文件使用系统支持的HCS类型的配置文件,HCS类型的配置文件,在编译时,会转成HCB文件,最终烧录到开发板里的配置文件即为HCB格式,代码中通过HCS解析接口解析HCB文件,获取配置文件中的信息,以下图为例。


2)通过调用调用build_hcs.py脚本,将sources中配置的hcs文件,转为outputs中配置的hcb文件。

drivers/peripheral/camera/hal/adapter/chipset/hispark_taurus/BUILD.gn
20.png


回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友