【问题标题】:How to send data using DMA to PCI device? [closed]如何使用 DMA 向 PCI 设备发送数据? [关闭]
【发布时间】:2021-10-22 06:02:59
【问题描述】:

如何对 DMA 控制器进行编程以向 PCI 设备发送/接收数据?

【问题讨论】:

  • wiki.osdev.org/PCI 有一些细节和链接。除此之外,这个问题根本不是关于你正在尝试做什么或你已经在做什么。
  • 我正在尝试为 pci 编写驱动程序,但我不知道从哪里开始当然我听说过查找连接到总线和 pci 枚举的设备,但我只是不知道知道如何开始。明白我只需要知道从哪里开始。那篇文章我已经读了很多遍了,阅读文档和阅读愚蠢的文章几乎没有区别。
  • @At2005 - 您的编辑是对这个问题的改进,但它不适合在当前状态下重新打开。它现在要求提供指向指南/教程的链接,即场外资源,这是标准关闭原因之一。这是在以后的编辑中要避免的事情,尤其是如果您要选中“提名重新打开”框。即使改写来避免这种情况(我的编辑),它也有点过于宽泛和开放,最好还是把它关闭。

标签: kernel device-driver osdev low-level pci


【解决方案1】:

我知道我需要使用它才能使用 DMA

没有“PCI DMA”。

PCI是使用特定低级协议(电信号)的总线(一组电线);它提供了一种检测/识别附加设备(“PCI 配置空间”)、确定它们使用哪些资源(IRQ、IO 端口、内存映射 IO 区域)并配置这些资源的标准化方法。

设备执行其设计目的(可能包括 DMA 引擎和/或某些设备的总线主控功能);但这一切都取决于设备,而不是 PCI 总线。

(听说 ISA DMA 很慢所以我不会用它

如果您正在为可以支持 ISA DMA(例如软盘驱动器控制器)的旧/遗留/ISA 设备编写设备驱动程序,那么您唯一的选择是使用 ISA DMA 还是根本不使用任何 DMA(以及浪费大量 CPU 时间等待慢速设备)。请注意,这些旧设备速度很慢,因此“慢”的 ISA DMA 控制器对它们来说已经足够快了。

我需要一份关于 PCI 实施的详细大纲。

“PCI 驱动程序”要做的主要事情是枚举 PCI 总线/总线以找出插入其中的设备,并确定每个设备使用的资源(IRQ、IO 端口、内存映射 IO 区域)。 PCI 驱动程序还可能支持热插拔(不建议初学者使用),并且(取决于操作系统设计)还可能负责为它找到的任何设备查找/启动设备驱动程序。

https://wiki.osdev.org/PCI 相对较好地涵盖了这一切。没有涉及太多/其他任何事情(除非您正在考虑碰巧连接到 PCI 的特定设备)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 2019-05-09
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    相关资源
    最近更新 更多