7.8. 英特尔图像处理单元 6 (IPU6) 输入系统驱动程序¶
版权所有 © 2023--2024 英特尔公司
7.8.1. 引言¶
本文档介绍了位于 drivers/media/pci/intel/ipu6 下的英特尔 IPU6(第 6 代图像处理单元)输入系统(MIPI CSI2 接收器)驱动程序。
英特尔 IPU6 可以在某些英特尔 SoC 中找到,但并非所有 SKU 中都存在
Tiger Lake
Jasper Lake
Alder Lake
Raptor Lake
Meteor Lake
英特尔 IPU6 由两个组件组成 - 输入系统 (ISYS) 和处理系统 (PSYS)。
输入系统主要用作 MIPI CSI-2 接收器,它接收并处理来自传感器的图像数据,并将帧输出到内存。
有两个驱动程序模块 - intel-ipu6 和 intel-ipu6-isys。 intel-ipu6 是一个 IPU6 通用驱动程序,负责 PCI 配置、固件加载和解析、固件身份验证、DMA 映射和 IPU-MMU(内部内存映射单元)配置。 intel_ipu6_isys 实现了 V4L2、媒体控制器和 V4L2 子设备接口。 IPU6 ISYS 驱动程序支持通过 V4L2 子设备传感器驱动程序连接到 IPU6 ISYS 的摄像头传感器。
注意
有关 IPU6 硬件的更多信息,请参阅 英特尔 IPU6 驱动程序。
7.8.2. 输入系统驱动程序¶
输入系统驱动程序主要配置 CSI-2 D-PHY,构建固件流配置,向固件发送命令,从硬件和固件获取响应,然后将缓冲区返回给用户。 ISYS 表示为多个 V4L2 子设备以及视频节点。
该图是使用以下命令生成的
fdp -Gsplines=true -Tsvg < dot > dot.svg
7.8.2.1. 使用 IPU6 ISYS 捕获帧¶
IPU6 ISYS 用于从连接到 CSI2 端口的摄像头传感器捕获帧。 ISYS 支持的输入格式在下表中列出
IPU6 ISYS 支持的输入格式 |
---|
RGB565、RGB888 |
UYVY8、YUYV8 |
RAW8、RAW10、RAW12 |
7.8.2.1.1. 示例¶
以下是在 Dell XPS 9315 笔记本电脑上使用 IPU6 ISYS 进行原始捕获的示例。 在这台机器上,ov01a10 传感器连接到 IPU ISYS CSI-2 端口 2,可以生成分辨率为 1280x800 的 sBGGR10 图像。
使用媒体控制器 API,我们可以通过 media-ctl [1] 和 yavta [2] 配置 ov01a10 传感器,以将帧传输到 IPU6 ISYS。
# Example 1 capture frame from ov01a10 camera sensor
# This example assumes /dev/media0 as the IPU ISYS media device
export MDEV=/dev/media0
# Establish the link for the media devices using media-ctl
media-ctl -d $MDEV -l "\"ov01a10 3-0036\":0 -> \"Intel IPU6 CSI2 2\":0[1]"
# Set the format for the media devices
media-ctl -d $MDEV -V "ov01a10:0 [fmt:SBGGR10/1280x800]"
media-ctl -d $MDEV -V "Intel IPU6 CSI2 2:0 [fmt:SBGGR10/1280x800]"
media-ctl -d $MDEV -V "Intel IPU6 CSI2 2:1 [fmt:SBGGR10/1280x800]"
配置完媒体管道后,可以使用 yavta 工具设置所需的传感器特定设置(例如曝光和增益设置)。
例如
# and that ov01a10 sensor is connected to i2c bus 3 with address 0x36
export SDEV=$(media-ctl -d $MDEV -e "ov01a10 3-0036")
yavta -w 0x009e0903 400 $SDEV
yavta -w 0x009e0913 1000 $SDEV
yavta -w 0x009e0911 2000 $SDEV
设置好所需的传感器设置后,可以按如下方式完成帧捕获。
例如
yavta --data-prefix -u -c10 -n5 -I -s 1280x800 --file=/tmp/frame-#.bin \
-f SBGGR10 $(media-ctl -d $MDEV -e "Intel IPU6 ISYS Capture 0")
使用上述命令,以 sBGGR10 格式捕获分辨率为 1280x800 的 10 帧。 捕获的帧可作为 /tmp/frame-#.bin 文件使用。
以下是在 Lenovo X1 Yoga 笔记本电脑上从摄像头传感器 ov2740 捕获 IPU6 ISYS RAW 和元数据的另一个示例。
media-ctl -l "\"ov2740 14-0036\":0 -> \"Intel IPU6 CSI2 1\":0[1]"
media-ctl -l "\"Intel IPU6 CSI2 1\":1 -> \"Intel IPU6 ISYS Capture 0\":0[1]"
media-ctl -l "\"Intel IPU6 CSI2 1\":2 -> \"Intel IPU6 ISYS Capture 1\":0[1]"
# set routing
media-ctl -R "\"Intel IPU6 CSI2 1\" [0/0->1/0[1],0/1->2/1[1]]"
media-ctl -V "\"Intel IPU6 CSI2 1\":0/0 [fmt:SGRBG10/1932x1092]"
media-ctl -V "\"Intel IPU6 CSI2 1\":0/1 [fmt:GENERIC_8/97x1]"
media-ctl -V "\"Intel IPU6 CSI2 1\":1/0 [fmt:SGRBG10/1932x1092]"
media-ctl -V "\"Intel IPU6 CSI2 1\":2/1 [fmt:GENERIC_8/97x1]"
CAPTURE_DEV=$(media-ctl -e "Intel IPU6 ISYS Capture 0")
./yavta --data-prefix -c100 -n5 -I -s1932x1092 --file=/tmp/frame-#.bin \
-f SGRBG10 ${CAPTURE_DEV}
CAPTURE_META=$(media-ctl -e "Intel IPU6 ISYS Capture 1")
./yavta --data-prefix -c100 -n5 -I -s97x1 -B meta-capture \
--file=/tmp/meta-#.bin -f GENERIC_8 ${CAPTURE_META}