我有两个与PCI接口的设备。我也有两个使用通用套接字代码的设备的代码。 (这些设备最初是通过MII /以太网连接的。)
现在,我需要编写一个PCI设备驱动程序来在两个设备之间来回传输数据包。
如何访问套接字代码打开的文件描述符?这与访问字符设备文件相同吗?
PCI驱动程序必须以某种方式从代码中的read()和write()中捕获数据包。
谢谢!
答案 0 :(得分:0)
您的问题的答案是:(1)您没有,(2)没有。
文件描述符是用户空间概念,内核驱动程序不与用户空间概念交互。 (是的,它们是由内核实现的,但是其他设备驱动程序不能直接使用它们,也不应该间接使用它们。)
您所做的是实现接收在内核可访问的内存空间中缓冲的数据的方法,并将其发送到您的硬件,然后从您的硬件接收数据并将其写入(当被要求时)到内核中的缓冲区 - 难以接近的记忆。
您可以通过实现字符设备驱动程序API以及PCI设备驱动程序API,然后将驱动程序注册为PCI设备,然后注册字符设备来完成此操作。虽然其中一些方法可能涉及文件结构,但它们不是您熟悉和喜爱的用户区域结构。
对于实现以太网协议的设备,生活更容易,因为您实现了网络设备接口。这样,您只需要编写从硬件获取数据所需的部件。
您需要的是设备硬件的规格,如何使用PCI寄存器和区域控制硬件。
好消息是,您不必单独执行此操作 - 有一个庞大的内核开发人员社区,以及一些关于Linux内核开发的好(和当前)书籍(见下文)。
<强>参考强>