如何通过单个carl9170设备驱动模块处理2个无线接口

时间:2013-04-17 11:56:54

标签: driver device

我想了解linux内核中一个设备驱动程序模块的性能。在这种情况下,我在linux中使用 carl9170 设备驱动程序。

  1. 如果我使用两个物理接口,单个模块carl9170如何处理2个不同的物理接口?

    因为到目前为止,我已经知道这两个物理接口将产生2个实例并为每个实例使用不同的数据包缓冲区,但只使用单个carl9170模块。所以这让我感到困惑。

  2. 我可以在linux内核源代码中找到哪个文件处理方法(与carl9170设备驱动程序有关)?

  3. 非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

对于2,请查看文件夹:

drivers/net/wireless/ath/carl9170/

此文件夹位于内核源目录下。它包含驱动程序的所有来源。

1:

几乎所有类都是面向对象编程的:对象如何知道它必须使用哪个数据实例? this指针引用正确的内存数据。

查看文件drivers/net/wireless/ath/carl9170/carl9170.h。驱动程序导出的每个函数都在此文件中声明。请注意,每个函数的第一个参数都有struct ar9170数据类型的引用。这正是驱动程序必须使用的数据集。它指定了驱动程序需要了解的有关设备及其状态的所有信息,因为USB总线可以解决设备连接的位置,设备状态,例如电源,连接状态以及驱动程序本身需要的任何其他数据。保持设备正常工作。

请注意,这是驱动程序内部数据。内核有自己的一组数据来保持驱动程序,设备和内核本身的工作。

看一下carl9170.h的546行。它是函数声明开始的地方。此文件是内核3.8.8。

就像面向对象编程一样,您可以根据需要分配尽可能多的类实例,内核将分配所需的ar9170个结构,一个引用每个设备。

可以在/sys/class/net目录下获取设备ID。每台连接到您计算机的网络设备都会有一个软链接。此链接会将设备指向以下内容:

$ ls -l eth0
../../devices/pci0000:00/0000:00:04.0/0000:02:00.0/net/eth0

pci0000:00是公共汽车。我相信0000:00:04.0是公交车地址。最后,0000:02:00.0是设备ID。 Afaik,每个注册的设备都遵循相同的逻辑。

最后,如果您有两个carl9170设备,则两者都位于/sys/class/net目录下,但其中一个可能会被命名为wifi0而另一个wifi1。此外,它们中的每一个都将指向不同的设备(使用命令ls -l /sys/class/net进行检查)。

我只是想说明在解释中我没有使用任何无线网卡。所以我不确定无线卡是否显示在/sys/class/net下面。无论如何,它将是非常相似的东西,如/sys/class/wireless