Назад | Перейти на главную страницу

как я могу контролировать, где монтируются устройства pci?

У меня есть машина с несколькими картами захвата в слотах 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.

  1. что это за числа вроде 0a: 00.0? Связаны ли они с физическими адресами слотов PCI, то есть могу ли я разумно ожидать, что эти числа не изменятся, когда я возился с другими устройствами PCI или меняю вещи в процессе загрузки ОС?

  2. могу ли я контролировать место установки карт, чтобы /dev/blackmagic3 будет соответствовать устройству, расположенному четвертым сзади, когда я смотрю на машину? и желательно, чтобы при удалении карты адреса других не переносились на более низкие числа? Я слышал, что это возможно с помощью правил udev.

  3. если нет 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"

Цифры вроде «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. Или нет. Ваш пробег может отличаться)