Camx架构-Camera kernel Driver & debugging

作者 : admin 本文共3525个字,预计阅读时间需要9分钟 发布时间: 2024-06-3 共3人阅读

目录

V4L2 framework

camera drivers

CRM 功能性

CRM log analysis

使能CRM log:

camera启动期间列举子设备:

userspace  连接或者取消已获得的device handles(UMD 等效于CSLLink/CSLUnlink)

userspace open request (UMD等效于CSLOpenRequest)

在SOF期间,request manager的操作:

如何将UMD sequence ID映射到kernel requestID

例如:CRM 申请ISP的request1和request2

UMD submit request

UMD submit request for realtime pipeline,并稍后在IFE/ISP中获取buf_done.

UMD submit request for offlinePreview pipeline,并稍后在ICP中获取buf_done.

SOF freeze log


V4L2 framework

Camx架构-Camera kernel Driver & debugging插图

camera request manager(CRM)遵循 V4L2 设备体系:

  1.  需要为userspace创建一个media node,以枚举所有被注册过的子设备(subdevices  or entities);
  2. 创建一个video node 用来管理session和requests;
  3. 创建一个bridge entities,这个子设备是被注册在media device node;
  4. 将realtime modeules之间不同的request settings同步。

Camx架构-Camera kernel Driver & debugging插图(1)

 V4L2的 subdevices

SENSOR, IFE, ICP, LRME, JPEG, FD, CPAS, CSIPHY, ACTUATOR, CCI, FLASH,EEPROM, and OIS drivers are created after device bootup

以下这句log就表示CSL成功调用V4L2的子设备接口控制:

camxcslhwinternal.cpp:2786 CSLHwInternalDefaultIoctl() Ioctl succeeded for device /dev/v4l-subdev1 (Type:CSLHwIFE, FD:12, Index:0)

设备分类:

根据hw的功能,camera相关设备可以分为realtime和nonrealtime两种。所有管理内存到内存的硬件devices被称为non realtime devices;所有进行实时streams数据驱动被成为realtime devices。

KMD driver体系

1.V4L2子设备node:如图所示camera kernel drivers用V4L2子设备接口支持UMD/CSL来建立session并与hw建立通信,这为KMD提供了single point IO control entry。

Camx架构-Camera kernel Driver & debugging插图(2)

2,camera node interface:为被UMD获取的每一个设备提供node session context和state machine的pool;session node与UMD node具有一一对应的映射关心。CAMX CSL 可以从session manager

获得设备session context。

Camx架构-Camera kernel Driver & debugging插图(3)​​​​​​​​​​​​​​

3,Camera node/context state machine

Camx架构-Camera kernel Driver & debugging插图(4)

4,V4L2 bridge initialization sequence

Camx架构-Camera kernel Driver & debugging插图(5)

camera drivers

CRM以前称为bridge derive,所有的V4L2子设备都被注册到bridge driver(根据camera devices)。

子设备注册具体内容:

1.V4L2子设备被注册到bridge driver的根设备上;

2.V4L2子设备的embedded media注册到bridge driver的根设备上;

3.提供SOF或者触发 到drivers 以应用新的settings;

4.与CSL/KMD通信关于即将要来的request;

5.跟踪每个devices可用的request;

6.出现error,要求设备重新使用特定的request。

Camx架构-Camera kernel Driver & debugging插图(6)​​​​​​​

CRM 功能性

CRM作用:

1,在不同pipeline不同设备之间同步reque;

2,从CSL bubble flag接收即将到达的request的相关信息,(双摄case下是同步开关)

3,用每帧SOF时间戳通知CSL;

4,对于以下情况的CRM序列示例,CRM可以针对例如局部闪光的闪光灯帧之类的情况诱发跳跃帧:

Camx架构-Camera kernel Driver & debugging插图(7)

5,处理realtime devices的flush请求

session create:CAM_REQ_MGR_CREATE_SESSION

当从CSL调用create——session时,CRM将创建一个唯一的“session——handle”,这个handle被用于跨UMD和KMD来标识给定session。

作为session creation的一部分,CRM还将设置input request queue,创建workqueue用于处理任务并初始化内存管理参数(例如安全/非安全的memory context banks)

Devices linking – CAM_REQ_MGR_LINK

single session中所有real-time devices都被作为media controller graph连接的一部分,CSL通过bridge driver链接session中具有实时功能的模块。

例如,在下图中,拓扑将sensor和IFE与bridge devices相连,并形成实时图。 bridge driver可以遍历图中链接的所有realtime entities,

并通过子设备在每个链接实体上针对指定请求的子设备公开的操作顺序应用设置。

此处提到的链接仅用于桥接器,以标识链接的模块。 该链接不表示模块之间的数据流/传输。

Example topology for the connection of sensor and IFE

Camx架构-Camera kernel Driver & debugging插图(8)

Example topology for front/back camera with flash

Camx架构-Camera kernel Driver & debugging插图(9)

UMD call sequence the setup a link

Camx架构-Camera kernel Driver & debugging插图(10)

CRM sequeue 包括如下步骤:

 1,Create session

2,Set up link with connected devices (optionally, connect to another link for dual cam sync)

3,Open new request

4,Devices notify CRM of packet availability for the request

5,IFE notifies CRM of SOF trigger/error etc.

6,On trigger, if any requests are ready, CRM asks devices to apply the request

Camx架构-Camera kernel Driver & debugging插图(11)

Camx架构-Camera kernel Driver & debugging插图(12)

CRM可以获取已连接设备的注册操作,CRM储存和处理每一台设备的request——table和内部queue的信息,而且订阅了每个device感兴趣的事件,其中比较重要的一件就是IFE订阅了SOF事件。

以下堆栈说明了CAM_REQ_MGR_LINK的调用堆栈:

__cam_isp_ctx_link_in_acquired: 2307 next state 3

__cam_isp_ctx_link_in_acquired+0x44/0x170

cam_context_handle_crm_link+0x54/0x108

__cam_node_crm_link_setup+0x30/0x80

cam_req_mgr_link+0xd00/0xee8

cam_private_ioctl+0x234/0x958

__video_do_ioctl+0x220/0x338

video_usercopy+0x320/0x650

video_ioctl2+0x14/0x20

v4l2_compat_ioctl32+0x78/0x90

compat_SyS_ioctl+0x128/0x248

__sys_trace_return+0x0/0x4

当IFE 触发CRM workqueue时调用以下stack:

cam_req_mgr_cb_notify_trigger+0x1c/0x180

__cam_isp_ctx_notify_sof_in_activated_state+0x74/0x158

__cam_isp_ctx_handle_irq_in_activated+0x184/0x348

cam_context_handle_hw_event+0x34/0xa0

cam_tasklet_action+0xd8/0x178

tasklet_acti
本站无任何商业行为
个人在线分享 » Camx架构-Camera kernel Driver & debugging
E-->