高通CRM的v4l2驱动模型

高通CRM的v4l2驱动模型_第1张图片

概述下crm中v4l2框架的初始化创建流程:

对于CRM主设备的v4l2框架创建过程:

1、分配和初始化v4l2 device对象

2、分配和初始化media device对象,然后将v4l2 device中mdev绑定到media device上

3、分配和初始化video device对象,将其中v4l2 device指向前面创建的v4l2 device对象;

将其中entity对象添加到media device中entities的链表中。创建video device时会创建设备结点/dev/video0,用于用户空间对内核空间的访问。

对于子设备的的v4l2 框架创建流程:

子设备有很多,cam-caps、cam-isp、cam-ope等等,他们依次进行初始化创建。

以cam-caps为例:

1、分配和初始化v4l2 subdev对象,其中包括四个主要成员:

list、v4l2_dev、entity、devnode。

(1)struct media_entity entity; //用于挂到media_device的entities链表上

(2)struct list_head list; //用于挂在v4l2_device的subdevs链表上

(3)struct v4l2_device *v4l2_dev; //指向一个v4l2_device对象,跟主设备指向的是同一个v4l2_device对象

(4)struct video_device *devnode; //创建设备节点/dev/v4l2-subdevX时创建的video_device

其中v4l2_dev指向主设备创建的v4l2 device对象。

list是链表头,它将挂载v4l2_device的subdevs链表上。

entity会挂到主设备创建的edia device的entities链表上。

在创建v4l2 subdev对象时,会创建一个video device,而devnode会执行创建设备video_device,结点名称为/dev/v4l2-subdev0。用户空间通过这个结点和内核空间交互。

其他的子设备和cam-caps按照相同的方式进行分配的创建初始化,并完成挂载。

二、Cam sync的v4l2驱动模型图

高通CRM的v4l2驱动模型_第2张图片

概述下cam sync v4l2框架初始化流程:

1、分配并初始化sync_device(全局变量),其中包括了v4l2_device的成员变量,所以v4l2_dev已经创建好了

2、调用video_device_alloc函数分配video_device对象

3、分配并初始化media_device对象,并创建/dev/media1结点

4、让video_device中成员变量v4l2_dev 指向前面创建好的v4l2_device

5、主要做两步,第一步是调用video_register_device函数创建/dev/video1结点。

第二步是让video_device的成员entity挂在media_device的entities链表上。

你可能感兴趣的:(Camera架构和ISP,v4l2,crm,拓扑图)