使用Linux源码编写Qnx 系统下摄像头的方法

2020-10-22  本文已影响0人  jackniu_ae28

Qnx系统虽然稳定可靠但是因为收费的原因导致用户量少,这样在调试外部驱动的使用因为资料少往往比较困难,本文介绍如何使用手头上的linux 源码来写Qnx源码,本文已经假定你对linux源码很了解。

1. 先阅读Qnx摄像头说明文档如下图:

http://www.qnx.com/developers/docs/7.0.0/index.html#com.qnx.doc.video_capture/topic/manual/vc_lib_ref.html

image.png

上图中说明摄像头工作时需要3个*.so文件,分别功能是:
libcapture-board-*-*.so 接口库,用于传递命令给下面两个库,对应下面的 libcapture-board-imx8qxp-mek-ov5640.so
libcapture-decoder-*.so 是操作decoder 解码器的库文件,对应下图 libcapture-camera-ov5640.so
libcapture-soc-*.so 是操作imx8qxp soc芯片的库文件,对应下图 libcapture-soc-imx8qxp.so

image.png
2. 修改编写库文件

libcapture-soc-imx8qxp.so 是不提供源码的,直接使用库文件即可。
主要就是写 libcapture-board-imx8qxp-mek-ov5640.so 和 libcapture-camera-ov5640.so 两个库。
先搞 libcapture-board-imx8qxp-mek-ov5640.so 这个 库文件 ,这个库文件的源码在:src\hardware\wfd\imx8x\caplib\board\imx8qxp-mek-ov5640\board.c
主要修改如下:
2.1 修改打开decoder 的地址和使用那个i2c设备节点操作


image.png

2.2 修改加载那个库文件


image.png

2.3 修改参数设置


image.png

2.4 根据摄像头OV5640或者DS90UB940-Q1 摄像头解码器的要求设置:
CAPTURE_PROPERTY_CSI2_VCHANNEL_NUM 设置CSI Virtual Channel Identifier(虚拟通道标识符) 参考 CSI-2 协议我理解是MIPI数据的通道MIPI_CSI0_DATA0 ~ MIPI_CSI0_DATA4传输顺序。
CAPTURE_PROPERTY_CSI2_NUM_DATA_LANES 设置Number of CSI2 data lanes(CSI2数据通道的数量) 如:OV5640就是2 (MIPI_CSI0_DATA0 ~MIPI_CSI0_DATA1 ) DS90UB940-Q1就是4 (MIPI_CSI0_DATA0 ~ MIPI_CSI0_DATA4)

image.png
参考linux系统下CAPTURE_PROPERTY_CSI2_NUM_DATA_LANESCAPTURE_PROPERTY_CSI2_VCHANNEL_NUM两个参数设置(OV5640)
当然virtual-channeldata-lanes都在dts有设置这里只是读取过来进行使用而已。 image.png image.png image.png image.png
3.经过上面修改基本差不多了主要精力修改 libcapture-camera-ov5640.so 上

源码在hardware\capture 里面源码结构如下:


image.png

经过我对源码分析发现只需要修改ov5640.c就行camera.c不需要修改。
代码调用过程是
camera.c -> decoder_update (函数) -> ov5640.c
主要修改 ov5640.c中的decoder_update函数:

decoder_update 函数主要工作如下3个步骤:
3.1打开读取设备


image.png

3.2复位和初始化


image.png
3.3 根据传递过来的参数对设备设置
image.png
3.4 经过上述修改后进行测试问题解决。
4.参考linux 源码编写decoder_update

需要说明的是linux源码对摄像头初始化部分在ov5640_mipi_v3.c 里porbe完成如下所示:
只参考probe这部分即可
4.1 复位操作

image.png
4.2读取摄像头ID
image.png
4.3初始化摄像头设备
image.png
上一篇 下一篇

猜你喜欢

热点阅读