我想了解linux内核中一个设备驱动程序模块的性能。在这种情况下,我在linux中使用 carl9170 设备驱动程序。
如果我使用两个物理接口,单个模块carl9170如何处理2个不同的物理接口?
因为到目前为止,我已经知道这两个物理接口将产生2个实例并为每个实例使用不同的数据包缓冲区,但只使用单个carl9170模块。所以这让我感到困惑。
我可以在linux内核源代码中找到哪个文件处理方法(与carl9170设备驱动程序有关)?
非常感谢您的帮助
答案 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
。