como posso controlar onde os dispositivos pci estão montados?

1

Eu tenho uma máquina com várias placas de captura em slots PCI Express. Para facilitar a resolução de problemas, gostaria que os dispositivos aparecessem no SO em ordem de posição física quando eu os conectasse ou desconectasse da máquina. Aqui está uma lista dos dispositivos que recebo do comando 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

e aqui está o material relevante do meu 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]

atualmente, se eu tirar, digamos, o cartão 3, então não terei blackmagic0 blackmagic1 blackmagic2 blackmagic4 blackmagic5 blackmagic6 blackmagic7 , mas eles são remapeados para que eu tenha os 7 dispositivos restantes em blackmagic0-6 .

  1. quais são esses números como 0a: 00.0? Eles estão relacionados a endereços físicos dos slots PCI, ou seja, posso razoavelmente esperar que esses números não mudem quando eu fico por aí com outros dispositivos PCI ou altero as coisas no processo de inicialização do SO?

  2. posso controlar onde os cartões são montados, de modo que /dev/blackmagic3 corresponderia ao dispositivo localizado em quarto lugar na parte de trás quando estou olhando para a máquina? e de preferência para que quando eu remover um cartão os endereços dos outros não sejam remapeados para números mais baixos? Eu ouvi que isso pode ser possível com as regras do udev.

  3. com falha 2, é possível determinar de forma confiável e repetida o mapeamento dos nomes dos dispositivos para seus locais físicos, para que eu possa usar links simbólicos para reorganizá-los?

Eu estou usando o Ubuntu 11.04.

editar: mais informações, aqui está o conteúdo atual do arquivo /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"
    
por wim 27.07.2011 / 06:41

1 resposta

1

Os números como "0a: 00.0" são os endereços de barramento PCI associados aos slots PCI. Estes são um mapeamento consistente - uma placa em um determinado slot sempre terá o mesmo endereço de barramento PCI.

Os dispositivos serão enumerados na ordem em que são vistos, portanto, se você remover um dispositivo, ele irá reorganizar a lista conforme sugerido. Você pode alterar esse comportamento com o udev, mas provavelmente é mais fácil criar links simbólicos.

Você pode determinar empiricamente qual endereço PCI mapeia para qual slot (por exemplo, colocar um cartão no slot 1, gravar o endereço do barramento, repetir) ou, se tiver muita sorte, o endereço do barramento para o mapeamento de slots contido no A saída de "biosdecode" será realmente útil. Não é útil na maioria das placas-mãe que vi, pois tem nomes de slots duplicados, ou eles não correspondem a nenhuma ordem lógica na parte de trás. No entanto, depois de ter elaborado o mapeamento, isso não mudará.

De qualquer forma, dê uma olhada na saída do biosdecode e talvez do dmidecode -t slot, você pode encontrar algo útil. Caso contrário, faça seu mapeamento manualmente.

(Além disso, o mapeamento PCI pode mudar - se você alterar as opções do BIOS ou do BIOS, os dispositivos poderão ser enumerados de forma diferente. EG, se um controlador USB integrado aparecer em 0b: 00.00 e você tiver dispositivos PCI mostrando em 0a: 00.0 e 0c: 00.0, e você desativa o controlador USB, pode resultar no deslocamento do dispositivo 0c: 00.0 para 0b: 00.0. Ou talvez não. Sua milhagem pode variar)

    
por 27.07.2011 / 08:02