我有一台机器,在 PCI Express 插槽中有多张捕获卡。为了便于解决问题,我希望在将设备插入或从机器上拔出时,这些设备按其物理位置的顺序显示在操作系统上。以下是我从命令中获取的设备列表lspci | grep lackmagic
0a:00.0 Multimedia video controller: Blackmagic Design Device a117
0d:00.0 Multimedia video controller: Blackmagic Design Device a117
10:00.0 Multimedia video controller: Blackmagic Design Device a117
18:00.0 Multimedia video controller: Blackmagic Design Device a117
1b:00.0 Multimedia video controller: Blackmagic Design Device a117
1e:00.0 Multimedia video controller: Blackmagic Design Device a117
21:00.0 Multimedia video controller: Blackmagic Design Device a117
24:00.0 Multimedia video controller: Blackmagic Design Device a117
以下 是 我 的 相关 内容dmesg | grep lackmagic
.
[ 16.105068] blackmagic: module license 'Proprietary' taints kernel.
[ 16.110742] blackmagic: Loading driver (version: 8.0.1rc4)
[ 16.111152] blackmagic_driver 0000:0a:00.0: PCI INT A -> GSI 28 (level, low) -> IRQ 28
[ 16.111163] blackmagic_driver 0000:0a:00.0: setting latency timer to 64
[ 16.111215] blackmagic_driver 0000:0a:00.0: setting latency timer to 64
[ 18.248018] blackmagic: Successfully loaded device "blackmagic0" [pci@0000:0a:00.0]
[ 18.248136] blackmagic_driver 0000:10:00.0: PCI INT A -> GSI 26 (level, low) -> IRQ 26
[ 18.248142] blackmagic_driver 0000:10:00.0: setting latency timer to 64
[ 18.248175] blackmagic_driver 0000:10:00.0: setting latency timer to 64
[ 20.372321] blackmagic: Successfully loaded device "blackmagic1" [pci@0000:10:00.0]
[ 20.372483] blackmagic_driver 0000:0d:00.0: PCI INT A -> GSI 30 (level, low) -> IRQ 30
[ 20.372489] blackmagic_driver 0000:0d:00.0: setting latency timer to 64
[ 20.372520] blackmagic_driver 0000:0d:00.0: setting latency timer to 64
[ 22.497786] blackmagic: Successfully loaded device "blackmagic2" [pci@0000:0d:00.0]
[ 22.497929] blackmagic_driver 0000:18:00.0: PCI INT A -> GSI 52 (level, low) -> IRQ 52
[ 22.497937] blackmagic_driver 0000:18:00.0: setting latency timer to 64
[ 22.497976] blackmagic_driver 0000:18:00.0: setting latency timer to 64
[ 24.621774] blackmagic: Successfully loaded device "blackmagic3" [pci@0000:18:00.0]
[ 24.621906] blackmagic_driver 0000:21:00.0: PCI INT A -> GSI 48 (level, low) -> IRQ 48
[ 24.621912] blackmagic_driver 0000:21:00.0: setting latency timer to 64
[ 24.621946] blackmagic_driver 0000:21:00.0: setting latency timer to 64
[ 26.745616] blackmagic: Successfully loaded device "blackmagic4" [pci@0000:21:00.0]
[ 26.745737] blackmagic_driver 0000:24:00.0: PCI INT A -> GSI 54 (level, low) -> IRQ 54
[ 26.745742] blackmagic_driver 0000:24:00.0: setting latency timer to 64
[ 26.745775] blackmagic_driver 0000:24:00.0: setting latency timer to 64
[ 28.870874] blackmagic: Successfully loaded device "blackmagic5" [pci@0000:24:00.0]
[ 28.870994] blackmagic_driver 0000:1e:00.0: PCI INT A -> GSI 55 (level, low) -> IRQ 55
[ 28.871001] blackmagic_driver 0000:1e:00.0: setting latency timer to 64
[ 28.871036] blackmagic_driver 0000:1e:00.0: setting latency timer to 64
[ 30.995130] blackmagic: Successfully loaded device "blackmagic6" [pci@0000:1e:00.0]
[ 30.995277] blackmagic_driver 0000:1b:00.0: PCI INT A -> GSI 56 (level, low) -> IRQ 56
[ 30.995284] blackmagic_driver 0000:1b:00.0: setting latency timer to 64
[ 30.995326] blackmagic_driver 0000:1b:00.0: setting latency timer to 64
[ 33.118817] blackmagic: Successfully loaded device "blackmagic7" [pci@0000:1b:00.0]
目前,如果我取出,比如说,卡 3,那么我将没有
blackmagic0 blackmagic1 blackmagic2 blackmagic4 blackmagic5 blackmagic6 blackmagic7
,而是它们被重新映射,以便我拥有剩下的 7 个设备blackmagic0-6
。
这些数字像 0a:00.0 是什么?它们是否与 PCI 插槽的物理地址相关,即,当我摆弄其他 PCI 设备或在操作系统的启动过程中进行更改时,我是否可以合理地期望这些数字不会改变?
我可以控制卡的安装位置吗,这样
/dev/blackmagic3
当我查看机器时,它将与位于后面第四个的设备相对应?最好当我移除一张卡时,其他卡的地址不会重新映射到较低的数字?我听说这可能可以通过 udev 规则实现。失败2,是否可以可靠且重复地确定设备名称到其物理位置的映射,以便我可以使用符号链接对它们重新排序?
我正在使用 Ubuntu 11.04。
编辑: 一些进一步的信息,这是文件的当前内容/etc/udev/rules.d/20-blackmagic.rules
KERNEL=="blackmagic[0-9]*", NAME="blackmagic/card%n", MODE="0666", GROUP="video", RUN+="/usr/lib64/blackmagic/BlackmagicPreferencesStartup %n", OPTIONS="last_rule"
KERNEL=="blackmagic_serial[0-9]*", NAME="blackmagic/serial%n", MODE="0666", GROUP="video", OPTIONS="last_rule"
答案1
像“0a:00.0”这样的数字是与 PCI 插槽关联的 PCI 总线地址。这些是一致的映射 - 给定插槽中的卡将始终具有相同的 PCI 总线地址。
设备将按照出现的顺序进行枚举,因此如果您删除设备,它将按照您的建议重新排列列表。您可能能够使用 udev 更改此行为,但创建符号链接可能更容易。
您可以凭经验确定哪个 PCI 地址映射到哪个插槽(例如,将卡放入插槽 1,记录总线地址,重复),或者如果您非常幸运,则“biosdecode”输出中包含的总线地址到插槽的映射实际上会很有用。它在我见过的大多数主板上都没有用,因为它有重复的插槽名称,或者它们实际上与背面的任何逻辑顺序不对应。但是,一旦您自己计算出映射,它就不会改变。
无论如何,查看 biosdecode 和 dmidecode -t slot 的输出,您可能会发现一些有用的东西。否则,请手动进行映射。
(此外,PCI 映射可能会发生变化 - 如果您更改 BIOS 或 BIOS 选项,则可能会导致设备以不同的方式枚举。例如,如果板载 USB 控制器出现在 0b:00.00,并且您的 PCI 设备出现在 0a:00.0 和 0c:00.0,并且您禁用 USB 控制器,则可能会导致 0c:00.0 设备向下移至 0b:00.0。也可能不会。您的里程可能会有所不同)