gpt4 book ai didi

linux - 为了编写PCI以太网驱动程序。如何在PCI以太网驱动程序中实现MMAP

转载 作者:行者123 更新时间:2023-12-03 09:47:50 25 4
gpt4 key购买 nike

在以太网PCI设备驱动程序中,如果驱动程序允许应用程序将用户空间缓冲区映射到驱动程序虚拟内存,并允许用户在打开设备驱动程序文件后调用MMAP。那么如何在PCI ETHERNET网络设备驱动程序中实现MMAP?
我已经看过dev_pci结构。之所以命名某些成员,是因为它们与MMAP有关,但是我无法确定如何使设备驱动程序实现MMAP。
在《 Linux设备驱动程序》一书中,作者并未将设备驱动程序中的内存映射与PCI设备驱动程序或网络设备驱动程序具体相关。
关于如何使我的PCI/网络/以太网设备驱动程序能够处理来自用户空间的MMAP调用以及映射用户的任何帮助,都给缓冲区提供了驱动程序的虚拟内存,我正在寻找特别是如何在PCI设备驱动程序中注册XX___mmap(...)实现功能的方法。和网络设备驱动程序。我在设备驱动程序中有dev_pci和net_dev设备驱动程序。

最佳答案

我需要做的是创建一个文件系统驱动程序或块设备驱动程序或char设备驱动程序,这些驱动程序又在我的系统上创建一个文件。基本上,它将是一个特殊的char或块设备文件。从应用程序打开它之后,我可以对其进行读写。设备文件将是我的设备驱动程序的入口点。一旦有了用户空间数据,就可以简单地读取或写入io端口。因此,对于此任务,如果您需要正确执行操作,则需要读取I/O操作功能(例如readlwritel),因此可以使用这些功能从NIC卡读取数据,我只需要查看Receive Descriptor Head queueReceive Descriptor Tail queue,就可以从那里获取npkt_t

A packet consists of an npkt_t structure, which has data buffers associated with it. If the driver wants to create a packet to send upstream, it should call alloc_up_npkt().Source https://www.qnx.com/developers/docs/6.3.0SP3/ddk_en/network/npkt_t.html


确实没有那么困难,因为该代码可用于linux内核网络堆栈,并且可以通过它来实现。但这是基于文件的热插拔驱动程序的唯一方法
有许多char设备,block设备,文件系统驱动程序可作为教程形式的示例,因此主要任务是创建实际的以太网框架并完成内核堆栈中所需的所有工作。

关于linux - 为了编写PCI以太网驱动程序。如何在PCI以太网驱动程序中实现MMAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65749351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com