深入理解Android相机体系结构之八

该系列文章总目录链接: https://blog.csdn.net/u012596975/article/details/107135938
本篇是《深入理解Android相机体系结构》连载文章的第八篇。

相机驱动层–高通KMD框架详解

一、概览

利用了V4L2可扩展这一特性,高通在相机驱动部分实现了自有的一套KMD框架,该框架通过V4L2标准方法在系统中创建设备节点,将控制接口直接暴露给UMD CSL进行访问,而其内部主要定义了一系列核心模块,包括CRM(Camera Request Manager),用于管理整个KMD的Session/Link的创建销毁以及Request的在子设备间的流转,该模块创建video0设备节点暴露关键接口给UMD,此外还包括了Sync模块,主要负责了UMD/KMD之间的数据同步与传输,创建video1设备节点暴露接口给UMD进行访问,除此之外,为了更精细化地控制一系列的硬件图像处理模块,包括ISP/IPE/Sensor等硬件模块,高通也分别为各自子模块创建了设备节点,进而暴露控制接口给UMD进行访问。
其中主要目录如下:

  • cam_core/: 关于KMD核心函数的实现都放在这,主要包括了subdev、node、context的一些诸如创建/注册/销毁等标准方法。
  • cam_req_mgr/: CRM的具体实现,用于创建v4l2_device,用于管理所有的子设备,同时生成video设备节点,暴露控制接口给UMD,主要包括了Session/Link的行为管理以及Request的同步与分发,此外,还创建了media_device,用于暴露枚举接口给UMD来轮询查找整个KMD的子设备。
  • cam_sync/: 该部分主要实现了用于保持与UMD的图像数据的同步相关业务逻辑,由于该模块的特殊性,高通直接为其创建了一个单独的video设备节点,暴露了用于同步的一些控制接口。
  • cam_utils/: 一些共有方法的实现,包括debug方法集等
  • cam_smmu/: 高通自己实现了一套smmu api,供KMD使用
  • cam_lrme/: 低分辨率运动估计模块的驱动实现
  • cam_fd/: 人脸识别的驱动程序
  • cam_isp/: isp的驱动程序
  • cam_jpeg/: 编码器,可以通过该驱动完成jpeg的编码工作
  • cam_cdm/: camera data mover,数据移动器的驱动实现,主要用于解析由CSL传入的命令信息,其中包括了寄存器的设置以及图像数据的处理等。
  • cam_cpas/: 该模块主要用于CSL获取camera 平台驱动信息,IPE/BPS电源控制等
  • cam_icp/: image control processor ,图像处理控制器驱动实现
  • cam_sensor_module/: 类传感器的系列硬件模块
    • cam_actuator/: 对焦马达的驱动实现
    • cam_cci/: 实现了用于通讯的CCI接口,其中包括了I2C以及gpio的实现
    • cam_csiphy: 基于MIPI CSI接口的物理层驱动,用于传输图像数据
    • cam_sensor_io: 使用cam_cci,向上实现了控制sensor的IO接口
    • cam_sensor: sensor 的驱动实现
    • cam_sensor_util: sensor相关的公有方法的实现
    • cam_eeprom: eeprom设备的驱动实现
    • cam_ois : 光学防抖设备的驱动实现
    • cam_flash: 闪光灯设备的驱动实现

二、核心模块解析

正如之前介绍的那样,整个框架主要由三个部分组成,CRM/Camera Sync以及子模块,接下来我们以下图为例简单讲解下各自的关系:
在这里插入图片描述
在系统初始化时,CRM内部会创建一个v4l2_device结构体,用于管理所有的子设备,与此同时每一个子设备在注册的时候都会创建各自的v4l2_subdev挂载到该v4l2_device上面。此外,CRM会创建一个video0设备节点提供关键接口给CSL来进行访问,而每个子设备也会在系统中生成各自的v4l2-sbudev设备节点,提供接口给CSL进行更为精细化的控制。而其中的Cam Sync在初始化的过程中,也创建了一个v4l2_device设备,并且生成了video1节点给CSL进行控制。这个框架主要就是围绕这三个部分进行的,CRM用于管理Session/Link的创建,控制Request在各个子设备中的流转,子设备受CSL控制进行配置以及图像处理工作,而一旦图像处理完成便会将结果发送至Cam Sync模块,进上传至CSL中。

1. CRM(Camera Request Manager)

该模块本质上是一个软件模块,主要做了以下几个事情:

  • 接收来自CSL的Session/Link/Request请求,并且维护其在内核的状态。
  • 在不同pipeline delay的子模块间,同步每一个Request状态,并按照需要发送给每一个子设备。
  • 如果出现错误,负责上传至CSL。
  • 负责针对实时子模块的flush操作。

其中针对Session/Link/Request的请求便是通过之前创建的video设备节点将接口暴露给CSL,一旦接收到命令便开始进行处理,而命令主要有以下几个:

  • CAM_REQ_MGR_CREATE_SESSION/CAM_REQ_MGR_DESTROY_SESSION: 分别表示了Session的创建和销毁,该Session保持着与CamX-CHI的一一对应关系。
  • CAM_REQ_MGR_LINK/CAM_REQ_MGR_UNLINK
  • 37
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
深入理解Android相机体系结构的过程中,我们需要了解相机API的工作原理和结构。Android相机体系结构主要由应用程序、相机服务和相机驱动程序组成。应用程序通过调用相机API与相机服务进行交互,而相机服务则负责管理相机硬件和驱动程序的通信。 相机API提供了对相机硬件的访问接口,可以控制相机的各种参数,比如曝光时间、焦距、白平衡等。通过相机API,应用程序可以实现拍摄照片、录制视频等功能。在调用相机API时,应用程序会通过相机服务与相机硬件进行通信,相机服务会将应用程序的请求转发给相机驱动程序。 相机服务是Android系统中的一个核心组件,负责管理相机硬件和驱动程序。相机服务会监听应用程序的相机请求,然后通过相机驱动程序与相机硬件进行通信。相机服务还会处理各种相机相关的事件,比如相机的打开、关闭、错误等。在Android系统中,每个相机硬件都对应一个相机服务实例,通过相机服务可以方便地管理多个相机硬件。 相机驱动程序是相机硬件的驱动程序,负责与相机服务进行通信,并控制相机硬件的工作。相机驱动程序可以理解为相机硬件的操作系统,它和相机硬件紧密结合,负责处理来自相机服务的指令,并将相机硬件的输出数据传递给相机服务。对于不同的相机硬件,其对应的相机驱动程序也会有所不同。 通过深入理解Android相机体系结构,我们可以更好地理解相机API的工作原理和使用方法,为开发高质量的相机应用提供参考和指导。同时,对于理解Android系统中其他基础组件的工作原理也会有所帮助。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值