Eu estou olhando para uma situação onde existem vários módulos DAQ PCIe idênticos (National Instruments) em um chassi PCI / PCIe, conectados através de um controlador de chassi simples ou duplo. Na pior das hipóteses, pode haver 8 módulos idênticos no barramento.
Fui levado a acreditar que a enumeração PCI não é determinística - ou seja, não há garantia de que, inicializando para inicializar, o barramento PCI será enumerado na mesma ordem. Isso é verdade?
Isso também implica que os valores PCI (e) de barramento / dispositivo / função podem mudar, inicializar para inicializar, mesmo que o layout de hardware físico não seja?
Em suma, eu entendo que a enumeração PCI inicial é feita pelo BIOS, e que o sistema operacional de boot (RHEL 6, no meu caso) usa essa lista enumerada para atender ao hardware identificado. Essa lista sempre contém os dispositivos encontrados na mesma ordem ou não?
Esta é uma dica em Red Hat Bugzilla Isso implica que a ordem do BIOS é sempre a mesma.
Por favor, note que eu não estou (ainda) falando sobre a ordem na qual o sistema operacional lida com os dispositivos (por exemplo, no Linux, determinando a ordem / dev / name).
Obrigado!
fonte
Respostas:
A resposta curta é "Sim", se o BIOS (que executa a enumeração inicial) aderir à especificação PCI.
De acordo com: "Arquitetura do Sistema PCI Express" R. Budruk, D. Anderson, T. Shanley, IMPRENSA DO DESENVOLVEDOR DE ADDISON-WESLEY, 2003. ISBN: 0-321-15630-7, página 743:
E para RHEL 6 :
No entanto, (algumas versões do Linux) suportam um parâmetro do kernel "pci = bfsort" que muda o algoritmo de enumeração do Linux para "largura primeiro". Isso mudará a ordem em que o kernel do Linux carrega e inicializa os dispositivos PCI, como o BIOS faz.
Em qualquer caso, a partir de boot-to-boot, listas enumeradas ainda conterão itens detectados na mesma ordem.
fonte