pci总线上的设备是否始终以相同的顺序进行探测?

时间:2016-12-23 02:43:20

标签: linux-kernel pci

我在总线上有2个无线pci卡(相同型号,但可以在2种不同模式下工作)。他们共享相同的驱动程序。我想要做的是像这样破解驱动程序:检查pci索引,第一个探测设备(索引0)将配置为模式A,下一个(索引1)将配置为模式B.

所以我想知道每次系统初始化时是否以相同的顺序探测它们。

如果探测顺序是随机的,还有其他方法可以做到吗?

我试过这个:将相同的卡插入不同的插槽,并检查我在/ sys / devices / pci0000:00下得到的内容。结果都是一样的。 所以内核对物理插槽一无所知?我想也许内核知道卡安装在哪个物理插槽上。可惜..

1 个答案:

答案 0 :(得分:1)

回答:不,他们不是一般的。

要解决的问题:不需要这样做,因为它已在现代内核 Linux系统中修复,网络接口的名称链接到设备的物理插槽。在您实际移动卡片之前,您将始终使用相同的名称。

<强>校正即可。最初我认为这是由内核提供的。不,它是由用户空间助手提供的,即 udev

  1. 包含固件/ BIOS提供的板载设备索引号的名称(例如:eno1)
  2. 包含固件/ BIOS的名称提供PCI Express热插拔插槽索引号(例如:ens1)
  3. 包含硬件连接器的物理/地理位置的名称(例如:enp2s0)
  4. 包含接口的MAC地址的名称(例如:enx78e7d1ea46da)
  5. 经典,不可预测的内核本地ethX命名(例如:eth0)
  6. 原产地:https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/

    示例:

    % ip link list dev enp0s20u2c2
    42: enp0s20u2c2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
        link/ether 4a:06:8b:65:72:36 brd ff:ff:ff:ff:ff:ff
    % ls -l /sys/class/net/enp0s20u2c2
    lrwxrwxrwx 1 root root 0 Dec 23 14:59 /sys/class/net/enp0s20u2c2 -> ../../devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:2.0/net/enp0s20u2c2