以太网驱动程序 - 不使用 DMA?

ethernet driver - without using DMA?

我正在编写以太网驱动程序。我想分两步完成:

  1. 不使用 DMA 写入(简单的 memcpy)
  2. 使用 DMA 重写。

请问是否可以先不使用DMA(或者是内核以太网框架坚持驱动程序必须使用DMA)?

内核不会阻止您做任何事情。但具体来说,我看不到它会阻止您编写 skbuff,也不会映射设备内存。

老实说,如果您想找到不使用 DMA 的网络驱动程序代码示例,您可能会遇到最大的困难。如果我理解正确,即使 Linux netpoll(用于通过网络进行崩溃日志记录)也不会避免驱动程序中的 DMA。

虽然我不确定 memcpy() 是否可行...

您需要阅读文档 (e.g. and specifically)。看起来你需要在 IO 内存上使用 memcpy_fromio()memcpy_toio()