【问题标题】:Are devices on pci bus always probed in the same order?pci 总线上的设备是否总是以相同的顺序探测?
【发布时间】:2023-04-11 12:00:01
【问题描述】:

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

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

如果探测顺序是随机的,有没有其他方法可以做到这一点?


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

【问题讨论】:

    标签: linux-kernel pci


    【解决方案1】:

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

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

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

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

    来源: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
    

    【讨论】:

    • 是的。 devA->wl0->Mode A.devB->wl1->Mode B.这就是我想要做的。但我不明白“它已在现代内核中修复”。如果他们的设备 idx(探测)是随机的,内核如何进行静态映射?我确定第一个探测的开发者名为 wl0,但第一个开发者可以是 devA 或 devB,对吧?
    • 因为物理设备连接到特定插槽。我将更新答案以显示示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多