O PCI significa interconexão de componente periférico, é um protocolo usado para conectar periféricos (DDR, UART, USB etc) com o sistema CPU em computadores ou estações de trabalho em dias iniciais. Este foi o protocolo definido pela Intel para seu próprio desenvolvimento de arquitetura. No horário atual, o PCI ainda é usado como um barramento de sistema nas estações de trabalho do PC ou da Intel Architecture.
Neste escrito, passaremos por alguns comandos úteis que o usuário pode executar para explorar o PCI em sistemas Linux. LSPCI e SETPCI são comandos usados principalmente na comunidade Linux PCI. Discutiremos alguns exemplos e casos de usar esses comandos.
Antes de começarmos com os comandos, vamos explorar pouco em sistemas PCI baseados em Linux. Normalmente, um sistema Linux consiste em componentes de hardware e software. A parte do hardware será baseada em alguma arquitetura, digamos x86. X86 é a arquitetura definida pela Intel. Existem vários periféricos no hardware: CPU, DDR, USB e UART para citar poucos. Estes são todos os componentes de hardware necessários para que um protocolo se comunique. É aí que a PCI vem jogar. PCI é o conjunto de regras/diretrizes que todos os componentes precisam seguir para se comunicar.
Agora todos os componentes de hardware estão conectados com o PCI, mas isso ainda não é suficiente. O sistema ainda não está completo e não pode ser usado. Falta uma peça importante, eu.e. Programas. O componente de software terá o BIOS, bootloader e OS. Todos esses componentes devem ser instalados no hardware.
Os componentes de software terão o software necessário para inicializar o PCI e ativar os comandos para o usuário. Depois que o sistema operacional estiver instalado no sistema, os comandos lspci e setpci estarão disponíveis.
Vamos dar um exemplo de Ubuntu, que é a distribuição do sistema operacional baseada em Linux. Depois que o Ubuntu estiver instalado em comandos de hardware baseado em x86, os comandos LSPCI e SETPCI devem estar disponíveis por padrão. Computadores pessoais são sistemas baseados em x86. Se o Ubuntu estiver instalado neles, esses são os sistemas que discutiremos.
Abra o terminal no Ubuntu e execute o comando lspci. Veremos a saída abaixo:
Na figura acima, o comando forneceu todos os detalhes dos dispositivos PCI do sistema. Isso fornece a lista completa de dispositivos PCI neste sistema.
Para fornecer alguns detalhes sobre os diferentes tipos de dispositivos PCI, existem 3 tipos de dispositivos PCI: i) Complexo radicular ii) Departamento de extremidade III) Pontes PCI.
Complexo radicular
Esta é a porta raiz de qualquer sistema PCI. Todos os dispositivos e pontes do terminal estão conectados ao complexo raiz ou à porta raiz.
Endpoint
Estes são os dispositivos que fornecem algum caso de uso ou função de uso de terminais. Por exemplo, a placa gráfica ou a placa de rede que está conectada ao slot PCI na placa -mãe entra na categoria de dispositivos de extremidade. Cada dispositivo de endpoint pode ter várias funções associadas ao dispositivo. As funções máximas suportadas pelo endpoint podem ser 8. Qualquer dispositivo de terminal pode ter contagem de funções de 1 a 8, a indexação começa de 0 e vai até 78.
Pontes
Estes são os dispositivos que conectam diferentes barramentos de PCI. Suponha que no sistema se houver vários ônibus, esses vários ônibus serão conectados com os dispositivos da ponte.
Em qualquer sistema PCI, geralmente haverá 1 porta radicular ou dispositivo radicular e pode haver várias pontes e dispositivos de extremidade.
Listas de comando lspci Todos os dispositivos e pontes do terminal na ponte da porta raiz i.e. Complexo radicular. Geralmente, o número do barramento atribuído a isso é 0. O barramento 0 é o barramento complexo e o barramento primário do sistema. No barramento único, pode haver 256 dispositivos e todos os dispositivos podem ter no máximo 8 funções. Este (número do barramento [B], número do dispositivo [d] e número de função [F]) é comumente conhecido como combinação BDF no mundo da PCI. A combinação BDF é suficiente para localizar qualquer dispositivo específico no sistema PCI. A atribuição desses BDF é feita pelo BIOS no processo conhecido como enumeração de barramento PCI. A enumeração de barramento PCI é feita por BIOS e BIOS digitaliza todo o número do barramento, número do dispositivo e número da função para todos os dispositivos e os preenchem. LSPCI é o utilitário que despeja esta informação enumerada no espaço do usuário, conforme solicitado pelo usuário executando o comando lspci.
No instantâneo, existem vários dispositivos listados pelo LSPCI. Vamos levar uma linha de exemplo para entender a saída fornecida pelo LSPCI:
Nesta saída, podemos ver as primeiras entradas como 00:00.0.
Primeiro 00 significa o número do ônibus. Isso fornece os detalhes sobre o número do barramento no qual este dispositivo está conectado. Segundo 00 após o cólon, representa o número do dispositivo. Último dígito depois . [DOT], representa o número da função.
Sim, este é o mesmo BDF que discutimos anteriormente.
Outras informações de string fornecem alguns detalhes do dispositivo. Esta é a breve descrição do dispositivo. Como o exemplo de saída informa que esta é a ponte host e também fornece informações ao fabricante.
Todos os valores neste exemplo são 0, isso não significa que eles sempre serão 0. Vamos dar outro exemplo com alguns valores diferentes:
Neste exemplo, podemos ver o número do barramento como 2 para controlador SATA e 3 para o dispositivo do controlador Ethernet. Os números de dispositivos são 01 para controlador SATA e 00 para controlador Ethernet. Ambos os dispositivos têm número de função como 0.
Após o BDF, há a descrição do dispositivo PCI.
Até agora, discutimos a saída padrão do comando i.e. executando apenas o comando lspci. Este comando também tem opções que podem ser transmitidas ao comando para fornecer mais detalhes do dispositivo. Se for necessária alguma formatação da saída, há opções também. Vamos explorar alguma opção do comando. Lista completa de opções pode ser vista na página do homem do comando. Apenas para se familiarizar com as opções mais usadas, vamos levar poucos exemplos.
Para listar o dispositivo e o ID do fornecedor dos dispositivos PCI, -nnn a opção pode ser usada.
O ID do fornecedor e o ID do dispositivo são alocados pelo PCI Sig Group. PCI SIG é o grupo que funciona para o desenvolvimento de padrões de PCI e seus aprimoramentos. Eles definem os aprimoramentos e novas versões da PCI para corresponder aos desenvolvimentos tecnológicos do sistema.
Na saída de exemplo, podemos ver [Xxxx: xxxx], em todas as linhas. Os primeiros 4 dígitos são o ID do fornecedor e 4 dígitos após o cólon são o ID do dispositivo. Para a primeira linha, o ID do fornecedor de saída é 8086, que é o ID do fornecedor alocado para a Intel. Segundo 4 dígitos depois do cólon i.e. 7190 é o ID do dispositivo.
Se quisermos listar o dispositivo com base em qualquer ID do dispositivo específico, o LSPCI com -d opção pode ser usado.
LSPCI -D: 7190, O comando fornecerá as informações do dispositivo com o ID do dispositivo 7190. O comando apenas forneceu as informações sobre o único dispositivo.
Exemplo de saída é a seguinte:
Se o BDF for conhecido de qualquer dispositivo, o LSPCI poderá ser usado para obter as informações do dispositivo específico. Vamos nos manter no mesmo exemplo de BDF que 00:00.0, -s Opção fornece a capacidade de buscar as informações do dispositivo.
LSPCI -S 00:00.0, Fornece as informações sobre o dispositivo que está conectado ao número do barramento 0 e ao dispositivo e à função do dispositivo são 0.
Opções LSPCI -VVV fornece as informações detalhadas do dispositivo. Ele lê o espaço de configuração do dispositivo e imprime as informações do dispositivo no formato detalhado. Esta opção pode ser usada em combinação de opção -d ou -s. O uso combinado de -s ou -d e -vvv fornecerá os detalhes do dispositivo específico.
Exemplo de saídas são as seguintes:
LSPCI -VVV -S 00:00.0
LSPCI -VVV -D: 7190
-X opção Fornece os detalhes do espaço de configuração do dispositivo em formato hexadecimal.
opção lspci -vt pode ser usado para fornecer a árvore como a saída dos dispositivos PCI. A seguir, a saída que tenho no meu sistema:
Comando setpci no Linux também fornece algumas maneiras de acessar/modificar o espaço de configuração dos dispositivos PCI. Para obter o ID do fornecedor do dispositivo PCI, podemos usar o comando como; setpci -s 00:00.0 0.c
Comando vai imprimir a palavra eu.e. 2 bytes do deslocamento 0 do BDF como 00:00.0. Devemos obter a saída como 8086.
ID de dispositivo estão os 2 bytes presentes no deslocamento 2 após o ID do fornecedor. Para obter o ID do dispositivo, o comando deve ser setpci -s 00:00.0 2.c
O comando setpci pode ser usado para modificar o conteúdo do espaço de configuração. Somente o pré-requisito para isso é que o campo de configuração deve estar escrevendo capaz. Alguns dos dispositivos têm por padrão o mestre de ônibus desativado. Para ativar o domínio do ônibus, o valor de deslocamento de 2 deve ser escrito. Para ativar a masterização de ônibus de qualquer dispositivo, o comando que pode ser usado é:
setpci -s 00:01.0 4.W = 2 ; Este comando permitirá que o domínio do barramento e, portanto, a região da memória da barra pode ser acessada.
Conclusão
Discutimos o comando LSPCI mais popular no Linux e suas opções comumente usadas. Tocamos em uma base em poucos conceitos básicos de conceitos de PCI, como BDF, tipos de dispositivos PCI, etc. Também discutimos um sistema PCI típico com poucos exemplos. Passamos por alguns exemplos de amostra e uso do comando lspci. Vimos um pouco no setpci e em alguns exemplos de uso de setpci. Com toda essa discussão, vamos concluir sobre este tópico.