C 以太网控制器中的硬件接收/发送队列是什么

C 以太网控制器中的硬件接收/发送队列是什么,c,network-programming,linux-device-driver,ethernet,C,Network Programming,Linux Device Driver,Ethernet,关于以太网控制器中的Rx/Tx硬件队列,我有一个非常基本的问题,它的用途是什么 在Linux内核中查看以下驱动程序时,它似乎是用来携带DMA描述符的 您是正确的,rx/tx队列包含传入和传出数据包的DMA描述符 如果您想知道网络驱动程序是如何工作的,我建议您看看ixy用户空间网络驱动程序: 代码相对简单,注释也很好,有一篇文章解释了它的工作原理: 有关接收接收和发送队列的说明,请参见本文第4.1节NIC环API: NIC公开多个称为队列或环的循环缓冲区来传输数据包。最简单的设置只使用一个接收和一

关于以太网控制器中的Rx/Tx硬件队列,我有一个非常基本的问题,它的用途是什么

在Linux内核中查看以下驱动程序时,它似乎是用来携带DMA描述符的


您是正确的,rx/tx队列包含传入和传出数据包的DMA描述符

如果您想知道网络驱动程序是如何工作的,我建议您看看ixy用户空间网络驱动程序:

代码相对简单,注释也很好,有一篇文章解释了它的工作原理:

有关接收接收和发送队列的说明,请参见本文第4.1节NIC环API:

NIC公开多个称为队列或环的循环缓冲区来传输数据包。最简单的设置只使用一个接收和一个发送队列。在NIC上合并多个传输队列,如果配置了多个接收队列,则根据过滤器或散列算法分割传入流量。接收环和发送环的工作方式相似:驱动程序编程一个物理基址和环的大小。然后,它用DMA描述符填充内存区域,即指向物理地址的指针,其中包数据存储有一些元数据。发送和接收数据包是通过头和尾指针在驱动程序和硬件之间传递DMA描述符的所有权来完成的。驾驶员控制尾部,硬件控制头部。这两个指针都存储在可通过MMIO访问的设备寄存器中


典型的以太网MAC芯片有以太网帧队列。@sawdust,谢谢回复。实际上,我不知道这些队列是如何特定于H/W的,它们只是作为阵列实现的,而不像在设备上有基址的描述符。您需要研究制造商的EMAC数据表,其中应该有这些队列如何工作的描述。除非您已经熟悉这些设备,否则仅仅阅读源代码并不能解释任何事情。即使是数据表也可能假定在以太网接收/传输方面具有较高的知识和/或经验。@sawdust,实际上此EMAC的数据表尚未公开,因此我所能做的就是阅读源代码:感谢@Tim的回复,在《注意到你共享了驱动程序》中提到了这一行,有一个物理基址和环的大小,但我在正在查找的驱动程序中找不到它,我所能看到的是,环只是一个数组,其中包含描述各种队列的索引。每个队列都有许多描述符。这是个好问题。我快速看了看那个司机,没找到。