linux - 如何处理linux内核驱动(新手篇)

标签 linux linux-kernel

我想了解如何使用 Linux 内核驱动程序。有一天,我编写了用于处理来自 gpio 的中断的 linux 内核模块。使用“make”命令构建它并使用“insmod”加载它并且它有效。但现在我正在尝试使用这个 ov5642 camera driver .我下载了源代码。在带有源的文件夹中制作“make”命令,当它构建时我使用“insmod”命令加载它。它现在列在已加载的模块列表中,但我不知道如何获取帧。 我怎样才能让它工作并访问它的输出?

最佳答案

为了从模块中捕获帧,您需要使用平台设备“探测”您的驱动程序(即您必须创建一个平台设备才能调用“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 .如果您有兴趣开发相机驱动程序,也可以在线引用 lxr 上的 Documentation/video4linux/或离线引用任何内核源代码。

如果您是新手,并且想学习处理内核驱动程序,请参阅 http://www.makelinux.net/ldd3/以及 lxr 上 Documentation/driver-model/platform.txt 下的特别平台驱动程序文档,用于创建和探测平台驱动程序。

关于linux - 如何处理linux内核驱动(新手篇),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41126485/

相关文章:

PHP - LDAP 搜索偶尔通过 TLS/SSL 工作

linux - 如何在 OpenSUSE Linux 上安装和运行 Docker CE?

linux - 在 centos 5.8 上删除并安装 webtatic 存储库

Linux 内核崩溃且无法启动(与控制台相关)?

memory-management - 内核虚拟地址转换

windows - 我如何在 node.js 中监听剪贴板事件?

linux - sigprocmask 在汇编中返回 -22

c - 线程通过 sysfs 调用内核信号量的死锁

linux - 关于 Linux 内核中的 gcov 输出?

linux - apt-get 安装升级在 kali linux 上不起作用