had*_*oop 3 camera driver linux-kernel imx6
OV5640 相机的Linux 驱动程序提供了有限的功能。
static struct i2c_driver ov5640_i2c_driver = {
.driver = {
.name = "ov5640",
.of_match_table = ov5640_dt_ids,
},
.id_table = ov5640_id,
.probe = ov5640_probe,
.remove = ov5640_remove,
};
Run Code Online (Sandbox Code Playgroud)
这些功能是name、probe和remove。
我对驱动程序不是很熟悉,但我找不到渲染像素的驱动程序的任何部分,因此我可以将它们存储到数组中。我也找不到任何用于读取像素的虚拟内存地址。
捕获的图像数据传输发生在代码的哪一部分?我正在寻找两个位置:一个在驱动程序中,一个在调用驱动程序的更高级别。
您可以从下一个位置捕获视频帧:
第二种选择是首选且更容易。
这里有三个驱动程序在起作用:
"ovti,ov5640""fsl,imx6-mipi-csi2""fsl,imx6q-ipu"
"fsl,imx-capture-subsystem"有时 CSI RX 和 IPU 驱动程序组合成单个 IP 核(如 TI AM57xx 芯片中的视频输入端口)。有时视频捕获可以在单独的驱动程序中实现(尽管它是 IPU 的一部分)。这只是您正在处理的平台架构问题,但主要思想是相同的。
看看这张照片:
因此,如果您正在寻找一个挂钩数据的地方,它应该在下一个地方之一:
drivers/media/platform/和里面drivers/staging/media/,它应该在那里的某个地方。此外,探索您的设备树文件,该ov5640节点应在 node.js 中引用 CSI/IPU 驱动程序port。您可以尝试通过一些已知的 V4L2 常量 grepping 内核源代码树来找到您的捕获驱动程序,例如:
$ grep -lIr V4L2_BUF_TYPE_VIDEO_CAPTURE drivers/media/platform/* drivers/staging/media/*
Run Code Online (Sandbox Code Playgroud)
或者尝试从您的设备树文件中找出来。例如,在 iMX6 平台上,所有相关节点如下所示:
ov5640: camera@3c {
compatible = "ovti,ov5640";
port {
ov5640_to_mipi_csi2: endpoint { remote-endpoint = <&mipi_csi2_in>; };
};
};
mipi_csi: mipi@21e0000 {
compatible = "fsl,imx6-mipi-csi2";
port@0 {
mipi_csi2_in: endpoint { remote-endpoint = <&ov5640_to_mipi_csi2>; };
};
};
ipu1: ipu@2800000 {
compatible = "fsl,imx6q-ipu";
ipu1_csi0: port@0 { };
};
capture-subsystem {
compatible = "fsl,imx-capture-subsystem";
ports = <&ipu1_csi0>;
};
Run Code Online (Sandbox Code Playgroud)
但是我建议您尝试从用户空间应用程序捕获视频帧,就像在这里完成的那样,因为在内核驱动程序中这样做可能是一项艰巨的任务。此外,在用户空间应用程序中,将捕获的帧保存为 jpg 文件会更容易,就像这里完成的那样。
有很多关于 iMX6 wrt 相机的文档:
| 归档时间: |
|
| 查看次数: |
1193 次 |
| 最近记录: |