我正在尝试理解如何使用linux内核驱动程序。有一天,我编写了linux内核模块来处理来自gpio的中断。用"make“命令构建它,并用"insmod”加载它,它就起作用了。但现在我正在尝试用.I下载这个ov5642 camera driver的源代码。在包含源代码的文件夹中使用"make“命令,当它构建时,我使用"insmod”命令来加载它。它现在列在已经加载的模块列表中,但我不知道如何获取抓取的帧。我如何让它工作并访问它的输出?
发布于 2016-12-14 23:10:06
为了从模块中捕获帧,您需要使用平台设备“探测”您的驱动程序(即您必须创建一个平台设备才能调用"ov5642_probe“函数)。如果探针函数正在被调用,并且成功地到达"return 0",您将在dmesg中得到打印"Chip ID 0x5642检测到“。(您可以很容易地检查探测函数是否正在被调用,方法是在探测函数的第935行添加一个简单的"printk(KERN ERR "### my probe function and“)”,并检查dmesg。如果正在调用它,则必须正确连接摄像头,才能成功探测驱动程序。
如果探测函数失败(即被调用但直到“返回0”才能到达),则读取ov5642的寄存器应该存在问题。如果您得到的“i2c ID”不是0x5642或i2c读取失败,请正确检查相机的芯片连接和电源(并确保其开机顺序按照数据手册中所述执行)。
如果没有调用探测函数,那么您需要创建一个适当的platform_device。
假设您在连接ov5642模块的自定义电路板上执行此操作。
如果你在dmesg中得到"Chip ID 0x5642检测到“,那么你应该尝试使用"v4l-utils”包。在v4l2-ctl命令中有许多可用选项,您可以在其中设置格式、查询功能、开始流、抓取帧。如果您无法在主板上安装v4l-utils,那么您应该尝试https://gist.github.com/maxlapshin/1253534。如果您对开发相机驱动程序感兴趣,还可以参考lxr online上的文档/video4linux/或任何离线内核源。
如果您是一个新手,并且想要学习如何处理内核驱动程序,请参考http://www.makelinux.net/ldd3/以及lxr上Documentation/ driver -model/platform.txt下的专门的平台驱动程序文档,了解如何创建和探测平台驱动程序。
https://stackoverflow.com/questions/41126485
复制相似问题