概述下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按照相同的方式進行分配的創建初始化,并完成掛載。