我有一个在PCI Express插槽中有多个采集卡的机器。 为了便于排除故障,我希望在插入设备或将设备从机器上拔下时,设备会按照其物理位置的顺序出现在操作系统上。 这里是我从命令lspci | grep lackmagic得到的设备列表 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相关的东西 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,是否有可能可靠地和可重复地确定设备名称到其物理位置的映射,以便我可以使用符号链接对它们进行重新sorting?
我使用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"
诸如“0a:00.0”之类的数字是与PCI插槽关联的PCI总线地址。 这是一个一致的映射 – 在一个给定的插槽卡总是有相同的PCI总线地址。
这些设备将被列举,以便他们看到,所以如果你删除一个设备,它会重新洗刷列表,如你所build议的。 您可以使用udev更改此行为,但是创build符号链接可能更容易。
您可以凭经验确定哪个PCI地址映射到哪个插槽(例如,将卡插入插槽1,logging总线地址,重复),或者如果您非常幸运,则总线地址到插槽映射中包含的输出“ biosdecode“实际上是有用的。 在我看到的大多数主板中,它没有用处,因为它有重复的插槽名称,或者它们实际上并不对应任何逻辑顺序。 但是,一旦你自己制定了映射,它不会改变。
无论如何,看看biosdecode的输出,也许dmidecode -t插槽,你可能会发现有用的东西。 否则,请手动进行映射。
(此外,PCI映射可能会改变 – 如果您更改您的BIOS或BIOS选项,可能导致设备的枚举方式不同。EG,如果板载USB控制器显示为0b:00.00,并且PCI设备显示为0a :00.0和0c:00.0,并且您禁用了USB控制器,可能会导致0c:00.0设备被降低到0b:00.0,否则可能会不同。