我试图解决如何使用Linux内核驱动程序。有一天,我编写了linux内核模块,用于处理来自gpio的中断。使用“make”命令构建它并使用“insmod”加载它并且它工作。但现在我正在尝试使用此ov5642 camera driver。我下载了源代码。在带有源的文件夹中创建“make”命令,当它构建时,我使用“insmod”命令加载它。它现在列在已加载的模块列表中,但我不知道如何获取抓取的帧。 如何使其工作并访问其输出?
答案 0 :(得分:1)
为了从模块中捕获帧,您需要使用平台设备“探测”您的驱动程序(即您必须创建一个平台设备才能调用“ov5642_probe”函数)。如果正在调用探测功能,并且成功到达“返回0”,您将在dmesg中获得打印“芯片ID 0x5642检测到”。 (您可以通过在探测功能的第935行放置一个简单的“printk(KERN ERR”###我的探测功能被称为“)”来检查探测功能的天气,并检查dmesg。如果是正在调用,您必须正确连接相机才能成功探测驱动程序。
如果探测功能失败(即被调用但未到达“返回0”),则读取ov5642的寄存器应该存在问题。如果你得到“芯片ID”而不是0x5642或i2c读取失败,请正确检查相机的i2c连接和电源(并确保按照数据表中的说明执行其上电顺序)。
如果未调用探测功能,则需要创建正确的platform_device。
假设您是在接口ov5642模块的自定义板上执行此操作。
如果在dmesg中检测到“芯片ID 0x5642”,则应尝试使用“v4l-utils”软件包。 v4l2-ctl命令中有许多选项,您可以在其中设置格式,查询功能,启动流,抓取帧。如果您无法在主板上安装v4l-utils,那么您应该尝试https://gist.github.com/maxlapshin/1253534。如果您有兴趣开发相机驱动程序,也可以在线阅读Documentation / video4linux / on lxr或离线任何内核源。
如果您是新手,并且想要学习处理内核驱动程序,请参阅lxr上的Documentation / driver-model / platform.txt下的http://www.makelinux.net/ldd3/和特别平台驱动程序文档,以创建和探测平台驱动程序。