我有一个实现字符设备驱动程序的 Linux 内核模块。我已经通读了Linux 设备驱动程序并遵循了几个教程。在这一点上,我有一个简单的模块,提供open,release以及write文件操作。
我正在尝试使用通用 DMA 层来创建流式 DMA 映射。我对 LDD 的以下摘录感到困惑:
下面的许多功能都需要一个
struct device. 此结构是 Linux 设备模型中设备的低级表示。驱动程序通常不需要直接使用它,但是在使用通用 DMA 层时确实需要它。通常,您可以在描述您的设备的特定总线中找到此结构。例如,它可以作为或 中的dev字段找到。struct pci_devicestruct usb_device
我进一步阅读了 Linux 设备模型,遇到了以下问题:
在最底层,Linux 系统中的每个设备都由一个 struct device 实例表示。
我怎样才能获得struct device我的角色设备的?是否在幕后为我创建了一个,还是我需要创建它?
我尝试手动创建一个类,class_create()然后使用它来创建一个设备device_create(),但是当我使用该设备设置 DMA 映射时,我想我只是得到了一个虚假地址。这是正确的方法吗?
关于我的平台的更多信息,我在 Altera SoCFPGA 平台 (ARM) 上工作,所以我的设备不是像 USB 或 PCI 设备那样真正的硬件设备,而是在 FPGA 中实现的逻辑。
我在LDD 的第 14 章中发现了很多我认为可能相关的信息(总线、设备、驱动程序等),但我不确定何时或如何使用它。对我来说,这一章似乎讨论了所有设备和驱动程序都使用的许多数据结构,但我很困惑,因为我不必使用其中的任何一个。