当前位置:首页>Linux>车轮上的Linux:揭秘车载Camera驱动开发的核心技术与框架④-V4L2 内核空间启动Stream

车轮上的Linux:揭秘车载Camera驱动开发的核心技术与框架④-V4L2 内核空间启动Stream

  • 2026-09-05 16:13:41
车轮上的Linux:揭秘车载Camera驱动开发的核心技术与框架④-V4L2 内核空间启动Stream

一、什么是 Media device setup

Media device setup 指的是:

 从 内核启动解析 Device Tree,到 Media Controller 构建完整媒体拓扑(graph),再到 用户空间配置并启用数据流 的全过程。

对于device tree感兴趣的,请戳:

车轮上的Linux:揭秘车载Camera驱动开发的核心技术与框架②-Device Tree

目标是:

  • 正确建立 Sensor → CSI → ISP → Video Node 的管线 

  •  使用户空间能够 枚举、配置、启停 这条管线

Media device probing枚举


二、内核阶段:Media device 构建

1️. Device Tree 解析(系统启动早期)

内核启动时:

解析 DT 中的媒体相关节点: 

  •  Camera Sensor(I2C) 

  •  CSI / ISP / Codec 

  • ports / endpoint / remote-endpoint

此时 还没有 Media device,只是硬件描述。

2️. 驱动 probe(创建 Media Entity)

2.1 各子设备驱动 probe

顺序通常是:

  1.  Sensor driver(I2C) 

  2.  CSI driver 

  3.  ISP driver 

  4.  Video node driver 

每个驱动在 probe() 中会:

  • 分配 struct media_entity

  •  定义: 

    media entity type(sensor / subdev / video) 具体可以参考

  • www.kernel.org/doc/html/v4.8/media/uapi/mediactl/media-types.html

pads(sink / source)

  • sink 输入pad

  • source 输出pad 

  • 注册到 media controller:

media_entity_pads_init(&sd->entity, num_pads, pads);

 2.2 注册 v4l2_subdev / video_device

  • Sensor / ISP / CSI

    → v4l2_subdev_register()
  • Video node

    → video_register_device()

这些都会挂在 同一个 media_device 下 (subdev和video device关系图,可参考文章 )。

车轮上的Linux:揭秘车载Camera驱动开发的核心技术与框架③-V4L2架构

3. 创建 Media Links(关键步骤)

3.1 从 Device tree endpoint 解析连接关系

驱动调用:

v4l2_fwnode_endpoint_parse()

解析 Device tree 中的:

  •  数据方向 

  •  bus type(MIPI CSI-2) 

  •  lane 数 

  •  format 能力 

3.2 创建 entity 之间的 link

最终形成 Media Graph:

[Sensor] → [CSI] → [ISP] → [Video Node]

4. media_device 注册完成

所有 entity & link 创建完成后:

media_device_register(&mdev);

内核会生成:

  • /dev/media0

  •  media topology 可被用户空间访问 

到这里,Media device setup(内核侧)完成。

/*Media device driver 1~7 except 4*/1.media_device_init();2.v4l2_device_register();3.video_register_device(); /*sensor driver*/4.v4l2_device_register_subdev(sensor); 5.v4l2_device_register_subdev(isp);6.v4l2_register_subdev_nodes();7.media_device_register();

用一幅图来表示

V4L2 Stream 启动流程

下一篇,我们将介绍下用户空间的启动过程。

参考文献:

3. Types and flags used to represent the media graph elements — The Linux Kernel documentation

最新文章

随机文章