7.4. Samsung S5P/Exynos4 FIMC 驱动¶
版权所有 © 2012 - 2013 Samsung Electronics Co., Ltd.
三星 SoC 应用处理器中可用的 FIMC(全交互移动摄像头)设备是一个集成的摄像头主机接口、色彩空间转换器、图像大小调整器和旋转器。它还能够通过 SoC 内部写回数据路径从 LCD 控制器 (FIMD) 捕获数据。SoC 中有多个 FIMC 实例(最多 4 个),它们具有略微不同的功能,例如像素对齐约束、旋转器可用性、LCD 写回支持等。该驱动程序位于 drivers/media/platform/samsung/exynos4-is 目录中。
7.4.1. 支持的 SoC¶
S5PC100(仅限内存到内存)、S5PV210、Exynos4210
7.4.2. 支持的功能¶
摄像头并行接口捕获 (ITU-R.BT601/565);
摄像头串行接口捕获 (MIPI-CSI2);
内存到内存处理(色彩空间转换、缩放、镜像和旋转);
运行时动态管道重新配置(将任何 FIMC 实例重新连接到任何并行视频输入或任何 MIPI-CSI 前端);
运行时 PM 和系统范围的挂起/恢复
7.4.3. 当前不支持¶
LCD 写回输入
每帧时钟门控(内存到内存)
7.4.4. 用户空间接口¶
7.4.4.1. 媒体设备接口¶
该驱动程序支持在 第四部分 - 媒体控制器 API 中定义的媒体控制器 API。媒体设备驱动程序名称为“Samsung S5P FIMC”。
此接口的目的是允许在运行时更改 FIMC 实例到 SoC 外围摄像头输入的分配,并可选地控制 MIPI-CSIS 设备与 FIMC 实体的内部连接。
媒体设备接口允许配置 SoC,以便通过多个 FIMC 实例从传感器捕获图像数据(例如,用于同时取景器和静态捕获设置)。
重新配置是通过启用/禁用驱动程序在初始化期间创建的媒体链接来完成的。可以通过媒体实体和链接枚举轻松发现内部设备拓扑。
7.4.4.2. 内存到内存视频节点¶
V4L2 内存到内存接口位于 /dev/video? 设备节点。这是一个独立的视频设备,它没有媒体垫。但是请注意,不允许在同一 FIMC 实例上进行内存到内存和捕获视频节点操作。驱动程序会检测到这种情况,但应用程序应避免这种情况,以免出现未定义的行为。
7.4.4.3. 捕获视频节点¶
该驱动程序支持在 接口 中定义的 V4L2 视频捕获接口。
在捕获和内存到内存视频节点上,仅支持多平面 API。有关更多详细信息,请参阅:单平面和多平面 API。
7.4.4.4. 摄像头捕获子设备¶
每个 FIMC 实例导出一个子设备节点 (/dev/v4l-subdev?),并且还为每个平台级别可用的和启用的 MIPI-CSI 接收器设备(当前最多两个)创建一个子设备节点。
7.4.4.5. sysfs¶
为了通过子设备 API 实现更精确的摄像头管道控制,该驱动程序创建了一个与 “s5p-fimc-md” 平台设备关联的 sysfs 条目。该条目路径为:/sys/platform/devices/s5p-fimc-md/subdev_conf_mode。
在典型用例中,可能存在以下捕获管道配置:传感器子设备 -> mipi-csi 子设备 -> fimc 子设备 -> 视频节点
当我们通过用户空间的子设备 API 配置这些设备时,配置流程必须从左到右,并且视频节点配置为最后一个。
当我们不使用子设备用户空间 API 时,属于管道的所有设备的整个配置都在视频节点驱动程序中完成。sysfs 条目允许指示捕获节点驱动程序不配置子设备(格式、裁剪),以避免在视频节点执行最后一个配置步骤时重置子设备的配置。
为了完全支持子设备控制(在开始流式传输之前在用户空间配置的子设备)
# echo "sub-dev" > /sys/platform/devices/s5p-fimc-md/subdev_conf_mode
仅用于 V4L2 视频节点控制(子设备由主机驱动程序内部配置)
# echo "vid-dev" > /sys/platform/devices/s5p-fimc-md/subdev_conf_mode
这是一个默认选项。
7.4.5. 5. 设备到视频和子设备节点的映射¶
在硬件中,每个设备实例都有两个相关的视频设备节点 - 视频捕获和内存到内存,此外还有一个子设备节点,用于更精确的 FIMC 捕获子系统控制。此外,每个 MIPI-CSIS 设备都会创建一个单独的 v4l2 子设备节点。
如何找出哪个 /dev/video? 或 /dev/v4l-subdev? 分配给哪个设备?
您可以 grep 内核日志以查找相关信息,例如
# dmesg | grep -i fimc
(请注意,如果存在 udev,它可能仍然会重新排列视频节点),
或者借助 media-ctl 工具从 /dev/media? 中检索信息
# media-ctl -p
7.4.6. 7. 构建¶
如果驱动程序构建为可加载的内核模块 (CONFIG_VIDEO_SAMSUNG_S5P_FIMC=m),则会创建两个模块(除了核心 v4l2 模块之外):s5p-fimc.ko 和可选的 s5p-csis.ko(MIPI-CSI 接收器子设备)。