0

我有两个与 PCI 接口的设备。我也有使用通用套接字代码的两种设备的代码。(这些设备最初是通过 MII/以太网连接的。)

现在,我需要编写一个 PCI 设备驱动程序来在两个设备之间来回传输数据包。

如何访问套接字代码打开的文件描述符?这和访问字符设备文件一样吗?

PCI 驱动程序必须以某种方式从代码中的 read() 和 write() 捕获数据包。

谢谢!

4

1 回答 1

0

你的问题的答案是:(1)你没有,(2)没有。

文件描述符是一个用户空间概念,内核驱动程序不与用户空间概念交互。(是的,它们是由内核实现的,但是其他设备驱动程序不能直接使用它们,也不应该间接使用它们。)

您所做的是实现将接收缓冲在内核可访问内存空间中的数据的方法,并将其发送到您的硬件,然后从您的硬件接收数据并将其(当被要求时)写入内核可访问内存中的缓冲区.

为此,您将实现字符设备驱动程序 API 以及 PCI 设备驱动程序 API,然后将您的驱动程序注册为 PCI 设备,然后注册为字符设备。虽然其中一些方法可能涉及文件结构,但它们不会是您熟悉和喜爱的用户级结构。

对于实现以太网协议的设备,生活会更轻松,因为您实现的是网络设备接口。这样,您只需编写将数据传入和传出硬件所需的部分。

您需要的是设备硬件规范,以及如何使用 PCI 寄存器和区域控制硬件。

好消息是,您不必单独做这件事——这里有一个庞大的内核开发者社区,还有几本关于 Linux 内核开发的好(和当前)书籍(见下文)。

参考

于 2010-06-19T01:07:00.010 回答