
一、什么是 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
顺序通常是:
Sensor driver(I2C)
CSI driver
ISP driver
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