我需要从头开始为omap4编写SPI
Linux字符设备驱动程序。我知道编写设备驱动程序的一些基础知识。但是,我不知道如何从头开始编写平台特定的设备驱动程序。
我已经编写了一些基本的char驱动程序,并且我认为编写SPI设备驱动程序将与此类似。Char驱动程序的结构file_operations
包含在驱动程序中实现的功能。
struct file_operations Fops = {
.read = device_read,
.write = device_write,
.ioctl = device_ioctl,
.open = device_open,
.release = device_release, /* a.k.a. close */
};
现在,我将以spi-omap2-mcspi.c代码作为参考,以获取从零开始开发SPI驱动程序的想法。
但是,我看不到诸如打开,读取,写入等功能。不知道程序从何处开始。
首先从编写通用内核模块开始。有很多地方可以查找信息,但是我发现此链接非常有用。在完成所有指定的示例之后,您可以开始编写自己的Linux驱动程序模块。
请注意,您不会仅仅复制粘贴示例代码并希望它能够工作,不是。内核API有时可能会更改,示例将不起作用。应将此处提供的示例视为如何做某事的指南。根据所使用的内核版本,您必须修改示例才能正常工作。
考虑尽可能多地使用TI平台提供的功能,因为这确实可以为您做很多工作,例如请求和启用所需的时钟,总线和电源。如果我没记错的话,您可以使用这些函数获取内存映射的地址范围,以直接访问寄存器。我不得不提到我对TI提供的功能有不好的经验,因为它们不能正确释放/清除所有获得的资源,因此对于某些资源,我不得不调用其他内核服务以在模块卸载期间释放它们。
编辑1:
我并不完全熟悉Linux SPI的实现,但首先要查看drivers / spi / spi-
omap2-mcspi.c文件中的omap2_mcspi_probe()函数。如您所见,它使用以下API将其方法注册到Linux主SPI驱动程序:Linux
/ include / linux / spi / spi.h。与char驱动程序相反,此处的主要功能是*
_transfer()函数。在spi.h文件中查找结构说明以获取更多详细信息。另外,也请查看此替代设备驱动程序API。
问题内容: 谁能解释我, 什么啊 这有什么用途? 如何使用? 为什么我不能定义与之功能相同的新功能? 问题答案: 一个,表示“输入- 输出控制”是一种特定于设备的系统调用。Linux(300-400)中只有几个系统调用,不足以表示设备可能具有的所有独特功能。因此,驱动程序可以定义一个ioctl,它允许用户空间应用程序向其发送订单。但是,ioctl并不是很灵活,并且会变得有些混乱(数十个“魔术数字”
问题内容: 如何使用打开,关闭,ioctl等功能为i2c设备制作字符设备?最近两周我一直在寻找有关它的信息,找不到任何有效的方法。我在Essential LinuxDevice Drivers中找到了一些信息,但是它是针对2.6内核编写的,我使用3.4.79(我正尝试在cubian distr上为cubieboard2编写此驱动程序),因此本书有许多不推荐使用的功能,我试图在那里写我的驱动程序,但
9.1. 简介 本章简要介绍了如何为FreeBSD编写设备驱动程序。术语设备在 这儿的上下文中多用于指代系统中硬件相关的东西,如磁盘,打印机, 图形显式器及其键盘。设备驱动程序是操作系统中用于控制特定设备的 软件组件。也有所谓的伪设备,即设备驱动程序用软件模拟设备的行为, 而没有特定的底层硬件。设备驱动程序可以被静态地编译进系统,或者 通过动态内核链接工具‘kld’在需要时加载。 类UNIX®操作
问题内容: 我已经看到它用于存储的返回类型,但是我已经在ARM体系结构中使用了它,并且效果很好。 那么,这有什么不同呢?在什么情况下我应该使用它呢? 问题答案: 许多类型强制转换只会“工作得很好”。但是,这不是很严格。没有什么可以阻止您将a强制转换为a 并取消对其的引用,但这并不遵循内核API,因此容易出错。 是Sparse使用的cookie ,该工具用于在内核中查找可能的编码错误。如果您未在启用
问题内容: 介绍 我听说过一些有关用Java编写设备驱动程序的信息(听说是“用我的耳朵”,而不是通过互联网),我想知道…我一直认为设备驱动程序在操作系统级别上运行,因此必须以相同的语言编写作为操作系统(因此大多是CI假设) 问题 我通常会对此假设有误吗?(看起来是这样) OS中如何使用“外来”语言的驱动程序? 无论如何(从编程语言的角度)对设备驱动程序有什么要求? 谢谢阅读 问题答案: 有两种方法
问题内容: 我要在开发板上启动Linux,并且我需要一个dts文件(设备树文件)来描述整个硬件。但是我对该文件的语法知之甚少,不足以在板上正确运行Linux。 我现在所知道的只是如何描述单元的中断号,频率,地址,父单元及其兼容的驱动器类型(如下所述): 我不熟悉其他高级用法或语法。 问题答案: 看一下与开发板最相似的板的dts。将其用作参考,并根据参考板和开发板之间的差异对dts进行更改。 还签出